解决了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下MAIL的另一解决方案
Oct 09 PHP
discuz论坛 用户登录 后台程序代码
Nov 27 PHP
PHP使用get_headers函数判断远程文件是否存在的方法
Nov 28 PHP
一个完整的php文件上传类实例讲解
Oct 27 PHP
PHP类的声明与实例化及构造方法与析构方法详解
Jan 26 PHP
PHP的Yii框架中View视图的使用进阶
Mar 29 PHP
Yii2前后台分离及migrate使用(七)
May 04 PHP
PHP实现文件上传功能实例代码
May 18 PHP
PHP判断函数是否被定义的方法
Jun 21 PHP
PHP常用函数之根据生日计算年龄功能示例
Oct 21 PHP
ThinkPHP5&amp;5.1实现验证码的生成、使用及点击刷新功能示例
Feb 07 PHP
PHP7 foreach() 函数修改
Mar 09 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
大师制作的中短波矿石收音机
2020/04/02 无线电
PHP 数字左侧自动补0
2008/03/31 PHP
PHP XML操作的各种方法解析(比较详细)
2010/06/17 PHP
让Json更懂中文(JSON_UNESCAPED_UNICODE)
2011/10/27 PHP
PHP之uniqid()函数用法
2014/11/03 PHP
php转换颜色为其反色的方法
2015/04/27 PHP
在WordPress中使用wp-cron插件来设置定时任务
2015/12/10 PHP
jQuery chili图片远处放大插件
2009/11/30 Javascript
jquery中输入验证中一个不错的效果
2010/08/21 Javascript
Jquery 插件开发笔记整理
2011/01/17 Javascript
js中各浏览器中鼠标按键值的差异
2011/04/07 Javascript
js判断一个字符串是否包含一个子串的方法
2015/01/26 Javascript
JavaScript控制两个列表框listbox左右交换数据的方法
2015/03/18 Javascript
基于jquery实现轮播焦点图插件
2016/03/31 Javascript
原生JS实现图片左右轮播
2016/12/30 Javascript
vue2组件实现懒加载浅析
2017/03/29 Javascript
基于jquery实现多选下拉列表
2017/08/02 jQuery
jQuery实现的3D版图片轮播示例【滑动轮播】
2019/01/18 jQuery
压缩包密码破解示例分享(类似典破解)
2014/01/17 Python
python中使用urllib2伪造HTTP报头的2个方法
2014/07/07 Python
Python+django实现简单的文件上传
2016/08/17 Python
python中的内置函数max()和min()及mas()函数的高级用法
2018/03/29 Python
Python中url标签使用知识点总结
2020/01/16 Python
Python编程快速上手——strip()函数的正则表达式实现方法分析
2020/02/29 Python
Python如何把十进制数转换成ip地址
2020/05/25 Python
HTML5轻松实现全屏视频背景的示例
2018/04/23 HTML / CSS
班组安全员工作职责
2014/02/01 职场文书
公司投资建议书
2014/05/16 职场文书
入党积极分子对十八届四中全会期盼的思想汇报
2014/10/17 职场文书
2014年教研工作总结
2014/12/06 职场文书
赔偿协议书
2015/01/27 职场文书
创卫工作总结2015
2015/04/22 职场文书
2016国庆节67周年寄语
2015/12/07 职场文书
详解python的内存分配机制
2021/05/10 Python
pytorch中的numel函数用法说明
2021/05/13 Python
JS如何实现基于websocket的多端桥接平台
2021/05/14 Javascript