“最难不过坚持”
本人承接扒站仿站,php网站维护,病毒查杀,网站编辑,网站改版,html制作
有需要网站维护,改版,病毒查杀,网站编辑,网站备案,html制作等相关的工作可以联系我。
本人有多年相关工作经验,也可提供免费咨询,交个朋友。
有需要探讨问题的朋友,也可以加我微信,共同探讨!
微信:15011482830 QQ:408917339
- https://jueru.net/
-
- :weixiao:
-
- :shuijiao: :weiqu: :zhenbang: :leng:
-
- :yiwen: :yiwen: :yiwen: :yiwen:
-
- 这个业务逻辑多少都有点奇怪了,阅读浏览次数增值在新闻详情页的控制器方法里setInc,这怎么还写进模型事件里了。如果非要用onAfterRead也可以,把新闻文章的内容单独分出来一个news_content表,然后把它和news做关联,然后给news_content表的onAfterRead事件做增值处理,这样点进新闻页内查询到文章内容时才会触发它。
-
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 . '<br>'; $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 . '<br>'; } } // 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
汉字“小”“写”上述方法不管用,不知道为什么