解决了Ajax、MySQL 和 Zend Framework 的乱码问题


Posted in PHP onMarch 03, 2009

问题:
在 Google Map 上用 Ajax 以 get 方式向服务器传递数据时,服务器端显示为 url 乱码,
Zend Framework 向 MySQL 存储数据为乱码,但是提取出来又是正常中文字体,
MySQL 中输入中文,显示在 PHP 网页上为乱码。
解决方式:
1. Ajax 的 url 编码需要转换,我使用的如下函数:
public function js_unescape($str)
{
$ret = '';
$len = strlen($str);
for ($i = 0; $i < $len; $i++)
{
if ($str[$i] == '%' && $str[$i+1] == 'u')
{
$val = hexdec(substr($str, $i+2, 4));
if ($val < 0x7f) $ret .= chr($val);
else if($val < 0x800) $ret .= chr(0xc0|($val>>6)).chr(0x80|($val&0x3f));
else $ret .= chr(0xe0|($val>>12)).chr(0x80|(($val>>6)&0x3f)).chr(0x80|($val&0x3f));
$i += 5;
}
else if ($str[$i] == '%')
{
$ret .= urldecode(substr($str, $i, 3));
$i += 2;
}
else $ret .= $str[$i];
}
return $ret;
}
调用示例: $row->name =XmlController::js_unescape( $this->getRequest()->getParam('name') );
2. 把所有涉及编码的地方都设为 utf8(php) 或 utf-8
MySQL 包括数据库,数据表,字段,数据库连接。
Zend Framework 包括数据连接,视图和html输出。
Ajax 包括 Javascript ,XML 的文件编码和字体编码。
Zend Framework数据连接编码设置:
参考http://phpeye.com/bbs/redirect.php?fid=2&tid=81&goto=nextoldset
Zend_Db_Table::setDefaultAdapter($dbAdapter);
Zend_Registry::set('dbAdapter', $dbAdapter);
$dbAdapter->query("SET NAMES 'utf8'");
如果是 PHP 直接连接则这样设置:
// Select all the rows in the markers table
$query = "SELECT * FROM markers WHERE 1";
//select 数据库之后加多这一句
mysql_query("SET NAMES utf8");
mysql_query("SET CHARACTER SET utf8");
mysql_query("SET COLLATION_CONNECTION='utf8_general_ci'");

PHP 相关文章推荐
php 获取select下拉列表框的值
May 08 PHP
PHP 设置MySQL连接字符集的方法
Jan 02 PHP
php数组函数序列之rsort() - 对数组的元素值进行降序排序
Nov 02 PHP
解析php中var_dump,var_export,print_r三个函数的区别
Jun 21 PHP
浅谈php安全性需要注意的几点事项
Jul 17 PHP
php函数serialize()与unserialize()用法实例
Nov 06 PHP
PHP内核探索之解释器的执行过程
Dec 22 PHP
CodeIgniter控制器之业务逻辑实例分析
Jan 20 PHP
关于php中一些字符串总结
May 05 PHP
Ajax和PHP正则表达式验证表单及验证码
Sep 24 PHP
PHP正则匹配反斜杠'\'和美元'$'的方法
Feb 08 PHP
thinkphp5.1框架实现格式化mysql时间戳为日期的方式小结
Oct 10 PHP
php Try Catch异常测试
Mar 01 #PHP
php 采集书并合成txt格式的实现代码
Mar 01 #PHP
PHP Ajax中文乱码问题解决方法
Feb 27 #PHP
php下几个常用的去空、分组、调试数组函数
Feb 22 #PHP
PHP 编程的 5个良好习惯
Feb 20 #PHP
PHP 截取字符串 分别适合GB2312和UTF8编码情况
Feb 12 #PHP
PHP 操作文件的一些FAQ总结
Feb 12 #PHP
You might like
CodeIgniter使用smtp服务发送html邮件的方法
2015/06/10 PHP
总结PHP中DateTime的常用方法
2016/08/11 PHP
PHP设计模式之模板方法模式定义与用法详解
2018/04/02 PHP
javascript 流畅动画实现原理
2009/09/08 Javascript
解决JS中乘法的浮点错误的方法
2014/01/03 Javascript
javascript中的throttle和debounce浅析
2014/06/06 Javascript
JS实现控制表格内指定单元格内容对齐的方法
2015/03/30 Javascript
javascript倒计时效果实现
2015/11/12 Javascript
常用javascript表单验证汇总
2020/07/20 Javascript
jquery判断输入密码两次是否相等
2020/04/22 Javascript
Javascript数组Array基础介绍
2016/03/13 Javascript
JavaScript中实现无缝滚动、分享到侧边栏实例代码
2016/04/06 Javascript
vue2里面ref的具体使用方法
2017/10/27 Javascript
vue-router路由与页面间导航实例解析
2017/11/07 Javascript
JS实现移动端整屏滑动的实例代码
2017/11/10 Javascript
Webpack框架核心概念(知识点整理)
2017/12/22 Javascript
Vue加载组件、动态加载组件的几种方式
2018/08/31 Javascript
vue+axios+element ui 实现全局loading加载示例
2018/09/11 Javascript
jQuery轻量级表单模型验证插件
2018/10/15 jQuery
实现一个 Vue 吸顶锚点组件方法
2019/07/10 Javascript
element-ui中按需引入的实现
2019/12/25 Javascript
[48:28]完美世界DOTA2联赛循环赛FTD vs Magma第二场 10月30日
2020/10/31 DOTA
Python对象转JSON字符串的方法
2016/04/27 Python
django foreignkey(外键)的实现
2019/07/29 Python
如何打包Python Web项目实现免安装一键启动的方法
2020/05/21 Python
解决python中0x80072ee2错误的方法
2020/07/19 Python
Python性能测试工具Locust安装及使用
2020/12/01 Python
解决Python import .pyd 可能遇到路径的问题
2021/03/04 Python
T3官网:头发造型工具
2019/12/26 全球购物
Java中有几种类型的流?JDK为每种类型的流提供了一些抽象类以供继承,请说出他们分别是哪些类
2012/02/06 面试题
经济信息系毕业生自荐信范文
2014/03/15 职场文书
幼儿园新学期开学寄语
2015/05/27 职场文书
医院见习总结
2015/06/24 职场文书
公证书
2019/04/17 职场文书
Vue的过滤器你真了解吗
2022/02/24 Vue.js
CSS font-variation 可变字体的魅力(实例详解)
2022/03/03 HTML / CSS