tp url里出现 php,thinkphp里url参数值有中文

thinkphp里url参数值有中文,如http://taotaoit.com/web/白.html,怎么也获得不到参数值。

刚开始以为是thinkphp路由规则有问题,查了很久也没解决。

后来以为,汉字转换成了UrlEncode编码,然后就用UrlDecode解码,还是不行。

I("webColor")就没有接收到值。

继续查找发现,I方法好像是存在bug,接受不到值,于是改$_GET["webColor"]接收,有值但是乱码,所以用iconv转码,然后就正常接收参数了。代码如下:

$webColor = iconv("gb2312","utf-8",$_GET["webColor"]); //从gb2312编码转为utf-8编码

20190510

后台搜索汉字也出现同样的情况,而且更复杂。

情况说明:

1,第一次点查询按钮搜索,传递参数方式是post,参数编码是utf-8;点击翻页,传递参数方式是get,不知道为什么参数编码变成了gb2312;

2,接收的参数需要在sql语句中进行模糊查询,还需要通过控制器返回到视图中显示;

解决方案:

I()函数,可以接收utf-8编码的参数,接收gb2312编码的参数出错,所以直接用$_REQUEST接收参数,包含post,get两种方式。然后判断参数的编码类型,不是utf-8编码的参数,转成utf-8编码。由于翻页时,传递的参数是用I()传递的,I()接收的参数是个一维数组,所以把数组中涉及汉字的查询参数,替换成转码后的参数,再传递给分页函数就可以了。

具体解决如下:

ArticlesModel.class.php修改的代码

$articleTitle = $_REQUEST["articleTitle"]; // 第一次点查询的时候,传递参数是post,之后点分页的时候是get,所以单独用$_POST和$_GET都不行,I()接收不到url编码的汉字,所以只能用$_REQUEST

if($articleTitle != ''){

// echo '1:' . $articleTitle . '
';

$encode = mb_detect_encoding($articleTitle, array("ASCII",'UTF-8',"GB2312","GBK",'BIG5')); // 判断接收到的字符串编码

if ($encode != 'UTF-8'){

// 如果不是UTF-8编码,则转成UTF-8编码(针对之后的分页),如果是,继续执行(针对第一次查询)

$articleTitle = iconv("gb2312",'UTF-8',$articleTitle); // gb2312转成UTF-8编码

// echo '2:' . $articleTitle . '
';

}

}

// echo $encode; // EUC-CN 是gb2312编码的一种表示方法

$articleContent = $_REQUEST["articleContent"];

if($articleContent != ''){

$encode = mb_detect_encoding($articleContent, array("ASCII",'UTF-8',"GB2312","GBK",'BIG5'));

if ($encode != 'UTF-8'){

$articleContent = iconv("gb2312",'UTF-8',$articleContent); // gb2312转成UTF-8编码

}

}

ArticlesAction.class.php修改的代码:

$canshu = I(); // 翻页是用到的参数,如果articleTitle和articleContent不为空的话,则把它们替换成转码之后的值,这样翻页就不会丢失参数了

$articleTitle = $_REQUEST["articleTitle"];

if($articleTitle != ''){

$encode = mb_detect_encoding($articleTitle, array("ASCII",'UTF-8',"GB2312","GBK",'BIG5'));

if ($encode != 'UTF-8'){

$articleTitle = iconv("gb2312",'UTF-8',$articleTitle);

}

$canshu['articleTitle'] = $articleTitle;

}

$this->assign('articleTitle',$articleTitle);

$articleContent = $_REQUEST["articleContent"];

if($articleContent != ''){

$encode = mb_detect_encoding($articleContent, array("ASCII",'UTF-8',"GB2312","GBK",'BIG5'));

if ($encode != 'UTF-8'){

$articleContent = iconv("gb2312",'UTF-8',$articleContent); // gb2312转成UTF-8编码

}

$canshu['articleContent'] = $articleContent;

}

$this->assign('articleContent',$articleContent);

$pager = new \Think\Page($page['total'],$page['pageSize'],$canshu);// 实例化分页类

20191114

汉字“小”“写”上述方法不管用,不知道为什么

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值