`

解决ThinkPHP中以Get方式提交中文字符乱码

阅读更多

 

接触thinkPHP还没几天,都还没入门呢,因为公司项目非常着急,自己也对thinkPHP很有兴趣想借机会提高一下,就着急的用thinkPHP开始了,当然是遇到了非常多的问题,不过还好通过朋友gidot的帮助及网络还有官方的手册,基本都解决了。

这几天又遇到个问题,就是GET提交中文会乱码的问题。在论坛看了下好像很多人都有而且也没个好的解决办法。
数据库、页面编码、文件保编码这些全都是UTF8是100%确定没有问题的。
有的人提供的说可行的方法,到我这里也不行,可能是因为我环境是WIDNOWS2003+IIS6.0的默认字符集为中文有关系。试遍了各种方法始终不行。

后来看说客户端base64编码了再发送请求,然后服务器上再BASE64解码。试了下,发现PHP的base64结果居然和JS的不一样-_-|||,后来想,问题是出在传递时的编码上,用base64也只是把字符转换成字母以避免被再次编码解码出现问题。
既然如此,那自己写个简单的编解码应该也能解决,试了下,果然解决了,现在分享一下我的方法。

先给客户端发送出的数据,编码一下,免得传递时被浏览器编码了到服务器出问题,我的解决办法是,发送表单时,先用JS给字符encodeURI编码了,然后将里面的百分号“%”替换成别的不会被编码的字符(注意这个字符要比较特别,不要和用户输入的字符混淆,也不能过长,考虑到一个字符容易和用户输入混淆,我选了3个字符“.s.”,),再让表单发送。具体实现:

程序代码
<form method='get' id="search1" action="__URL__">
<input value="{$Think.get.group_name|getChineseGetValue}" type="text" name="group_name"id="group_name" title="组名查询" class="medium" >
<html:imageBtn type="button"click="getId('group_name').value=encodeURI(getId('group_name').value).replace(/%/g,'.s.');
getId('search1').submit();"class="search imgButton" value="查询" style="impBtn hMargin fLeft shadow" />
</form>


然后在服务器端写个函数,把我们编码的数据解码成正常的:
程序代码

//解码GET传值
function getChineseGetValue($key){
if (strlen($key)>0){
  return urldecode(str_replace('.s.','%',$key));
}
}



然后我们接收参数查询时要解码:
程序代码
$map['group_name'] = array('like',"%".getChineseGetValue($_GET['group_name'])."%");


最后在页面显示GET值的时候,也要解码:
程序代码

<form method='get' id="search1" action="__URL__">
<input value="{$Think.get.group_name|getChineseGetValue}" type="text" name="group_name" id="group_name" title="组名查询" class="medium" >
<html:imageBtn type="button" click="getId('group_name').value=encodeURI(getId('group_name').value).replace(/%/g,'.s.');getId('search1').submit();" class="search imgButton" value="查询" style="impBtn hMargin fLeft shadow" />
</form>



这样就可以了,希望本帖对有此问题的童鞋能有所帮助,
附带说明下,那个 getId 是我的一个JS函数,偷懒用的(可以不用那么麻烦的老写document.getElementById……),代码如下:
程序代码
function getId(id){
return document.getElementById(id);
}

 

分享到:
评论

相关推荐

    ThinkPHP_getshell-v2.zip

    标题“ThinkPHP_getshell-v2.zip”提示我们关注的是与ThinkPHP框架相关的安全问题,特别是一个可能导致getshell的漏洞。Getshell通常指的是攻击者能够通过某种方式在目标服务器上执行命令,这通常与代码注入漏洞相关...

    ThinkPHP中文转拼音字母简单调用

    "ThinkPHP中文转拼音字母简单调用"这个主题,正是关于如何在ThinkPHP中轻松实现这一功能。 首先,我们要理解的是,中文转拼音主要是通过特定的算法和库来完成的,这些库能够将汉字映射到对应的汉语拼音。在这个案例...

    ThinkPHP采用GET方式获取中文参数查询无结果的解决方法

    总结上述知识点,要解决ThinkPHP中GET方式获取中文参数查询无结果的问题,需遵循以下步骤: 1. 确认浏览器及服务器端的编码方式,以及数据库存储的编码方式,确保它们之间能够兼容。 2. 在服务器端接收GET参数时,...

    ThinkPHP v5.x命令执行利用工具(可getshell)

    在这个场景中,"ThinkPHP v5.x命令执行利用工具(可getshell)"指的是一个专门针对ThinkPHP v5.x版本的安全漏洞进行利用的工具,该工具能够使得攻击者通过命令执行漏洞获取服务器的shell访问权限。 命令执行漏洞...

    thinkphp中文分词

    总结来说,这个"thinkphp中文分词"项目提供了一个在ThinkPHP框架内实现中文分词的解决方案。通过`dict.csv`词典文件、`SplitWord.class.php`分词类以及示例图,开发者可以学习如何在PHP环境中高效地处理中文文本,...

    ThinkPHP的success并不跳转页面,而是直接输出json字符串的原因.zip解决ThinkPHP的success并不跳转页面,而是直接输出json字符

    在ThinkPHP中,如果你希望在非AJAX请求下使用`success`方法进行页面跳转,你需要确保请求不是通过异步方式发送的。对于前端来说,这意味着需要取消或修改设置`ajax=1`的参数,或者不设置`X-Requested-With`请求头。...

    记一次tp5.0.24 getshell1

    在这篇文章中,我们将探讨一个关于TP5.0.24版本的getshell漏洞的记录。TP5.0.24是ThinkPHP框架的其中一个版本,该框架是一种流行的PHP开发框架。 首先,我们需要了解TP5.0.24的特点。TP5.0.24是一个阉割版的...

    thinkphp3.2 防止表单重复提交

    在这个场景中,我们将深入探讨如何利用ThinkPHP 3.2 的机制防止表单的重复提交。 首先,`{:form_token()}` 是ThinkPHP 3.2 提供的一个模板标签,用于生成表单令牌(Token)。这个令牌是一个唯一的字符串,通常会...

    thinkphp5.X-Batch-getshell-master.rar

    《深入剖析ThinkPHP5.x批量getshell漏洞及防范策略》 在网络安全领域,尤其是Web应用安全方面,"getshell"一词通常意味着攻击者成功获得了服务器的命令执行权限,能够执行任意系统命令,对服务器造成严重威胁。针对...

    2021年THINKPHP关于IIS上面中文参数乱码问题电脑资料.pdf

    2021年THINKPHP关于IIS上面中文参数乱码问题电脑资料.pdf

    thinkphp5.1.39、tp5.1.39版本

    2. **全面的注解支持**:在这一版本中,注解成为了一种重要的编程方式。通过注解,开发者可以在代码中直接定义路由、控制器行为、模型关系等,使代码更加清晰,降低了配置文件的复杂度。 3. **强大的查询构建器**:...

    ThinkPHP 中文版

    本文将从ThinkPHP 3.1.3版本开始,深入探讨其核心设计理念、主要功能及变化,直至最新的5.0.11版本,分析其演进过程中的关键点,以及如何结合扩展库进行应用开发。 一、ThinkPHP 3.1.3:基础构建与特点 ThinkPHP ...

    thinkphp中session和cookie无效的解决方法

    主要介绍了thinkphp中session和cookie无效的解决方法,涉及针对BOM头的分析与删除方法,具有一定的参考借鉴价值,需要的朋友可以参考下

    Thinkphp 使用Dompdf

    Thinkphp 使用Dompdf

    ThinkPHP中FCKeditor编辑器的使用

    ThinkPHP中FCKeditor编辑器的使用 前段时间一直为TP寻找好用的在线编辑器而苦恼,经过多次尝试与修改后,终于成功地将编辑器集成到Thinkphp里面。 而且可以用直接上传和ajax两种方式处理内容。为了给一些还没能成功...

    ThinkPhp2.0 框架使用中文手册

    在ThinkPHP2.0中,核心概念和关键组件包括: 1. **MVC模式**:模型(Model)负责处理数据和业务逻辑,视图(View)负责呈现用户界面,控制器(Controller)协调模型和视图,实现数据和界面的交互。这种分离提高了...

    Thinkphp模板中截取字符串函数简介

    为了解决中文字符截取的问题,ThinkPHP提供了一个名为`msubstr`的函数。这个函数专为处理中文字符而设计,它支持多种字符集,并能处理全角字符。`msubstr`函数的使用方法如下: ```html {$vo.title|msubstr=5,5,...

    thinkphp+pgsql

    这个示例中,我们定义了一个新的 `Pgsql` 类来继承自 ThinkPHP 的 `Connector` 类,并重写了 `connect` 方法以适应 PostgreSQL 的连接方式。 #### 四、测试验证 完成以上步骤后,可以尝试通过 ThinkPHP 连接到 ...

    THINKPHP截取中文字符串函数实例代码

    如果支持,它将优先使用这两个函数进行多字节字符的截取,以确保正确处理中文字符。如果这两个函数不可用,`msubstr`会通过正则表达式来识别并截取字符串中的字符。 正则表达式部分是针对不同编码(如UTF-8、GB2312...

Global site tag (gtag.js) - Google Analytics