发现一个BUG: 小程序页面传输参数时,会把&符号丢失。
发布于 7 年前 作者 wei57 10165 次浏览 来自 问答

<!-- 显示列表 -->

<view class=“itemlist” wx:if="{{food_list}}">

<view class=“item” wx:for="{{food_list}}" wx:key=“food_listID”>

<navigator url="…/LawDetail/LawDetail?showType={{showType}}&dataType={{dataType}}&id={{item.id}}&SuperviseType={{item.SuperviseType}}&CaseNumber={{item.CaseNumber}}&CaseDescption={{item.CaseDescption}}">

。。。。。

这样子传的。CaseDescption中有&&&&符号,&及后面的字符全丢。

5 回复

不是因为太长,我测试过了。 @binbin  就是因为字符。 使用encodeURI是可以的,但我这种循环记录如何在wxml中调用encodeURI…呢?并且这是循环记录参数,也不好定义一个全局变量呀,如果把我数组全放全局变量里,全局变量这么用也不太好吧?

encodeURIComponent  我知道使用这个函数,可是在这写的这种风格里,无法使用:encodeURIComponent,怎么办?

我之前是用wx.navigator方法,不是navigator标签,也出现类似的问题,后来我是只带一个ID过去到详情页,到了详情页再通过ID查出明细,这种带多个参数我总感觉会出问题的,即使在开发的时候没发现,等上线了bug就来了

URL带参太长,被截掉了,可以定义一个全局变量来保存这些信息

我现在把这些符号全搞成全角的了:)

    protected string toJSonString(string s)

    {

        StringBuilder sb = new StringBuilder();

        for (int i = 0; i < s.Length; i++)

        {

            char c = s[i];

            switch ©

            {

                case ‘\"’:

                    sb.Append("\\\"");

                    break;

                case ‘\\’:

                    sb.Append("\\\\");

                    break;

                case ‘/’: 

                    sb.Append("\\/"); 

                    break;

                case ‘\b’:

                    sb.Append("\\b");

                    break;

                case ‘\f’:

                    sb.Append("\\f");

                    break;

                case ‘\n’:

                    sb.Append("\\n");

                    break;

                case ‘\r’:

                    sb.Append("\\r");

                    break;

                case ‘\t’:

                    sb.Append("\\t");

                    break;

                case ‘=’:

                    sb.Append(“=”);

                    break;

                case ‘&’:

                    sb.Append("&");

                    break;

                case ‘?’:

                    sb.Append("?");

                    break;

                case ‘%’:

                    sb.Append("%");

                    break;

                default:

                    if ((c >= 0 && c <= 31) || c == 127)//在ASCⅡ码中,第0~31号及第127号(共33个)是控制字符或通讯专用字符

                    {

                    }

                    else

                    {

                        sb.Append©;

                    }

                    break;

            }

        }

 

        //return Server.UrlEncode(str);

        //return Server.UrlPathEncode(Server.UrlPathEncode(str));

        //return HttpUtility.UrlPathEncode(sb.ToString());

        return sb.ToString();

    }

回到顶部