解决了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+java实现自动新闻滚动窗口
Oct 09 PHP
亲密接触PHP之PHP语法学习笔记1
Dec 17 PHP
一个数据采集类
Feb 14 PHP
改写ThinkPHP的U方法使其路由下分页正常
Jul 02 PHP
php中header跳转使用include包含解决参数丢失问题
May 08 PHP
部署PHP时的4个配置修改说明
Oct 19 PHP
php通过smtp邮件验证登陆的方法
May 11 PHP
使用Zttp简化Guzzle 调用
Jul 02 PHP
PHP基于imagick扩展实现合成图片的两种方法【附imagick扩展下载】
Nov 14 PHP
YII2框架中使用RBAC对模块,控制器,方法的权限控制及规则的使用示例
Mar 18 PHP
Thinkphp框架使用list_to_tree 实现无限级分类列出所有节点示例
Apr 04 PHP
通过实例解析PHP数据类型转换方法
Jul 11 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
使用PHP和JavaScript判断请求是否来自微信内浏览器
2015/08/18 PHP
PHP+RabbitMQ实现消息队列的完整代码
2019/03/20 PHP
PHP程序员简单的开展服务治理架构操作详解(一)
2020/05/14 PHP
新手入门常用代码集锦
2007/01/11 Javascript
js 获取时间间隔实现代码
2014/05/12 Javascript
60行js代码实现俄罗斯方块
2015/03/31 Javascript
JSON与XML的区别对比及案例应用
2016/11/11 Javascript
深入理解Javascript中的观察者模式
2017/02/20 Javascript
JS实现的点击表头排序功能示例
2017/03/27 Javascript
详解vue嵌套路由-params传递参数
2017/05/23 Javascript
React服务端渲染(总结)
2017/07/01 Javascript
Vue瀑布流插件的使用示例
2018/09/19 Javascript
JavaScript面试技巧之数组的一些不low操作
2019/03/22 Javascript
javascript中undefined的本质解析
2019/07/31 Javascript
原生JavaScript实现日历功能代码实例(无引用Jq)
2019/09/23 Javascript
微信小程序实现锚点功能
2019/11/20 Javascript
[01:10:27]DOTA2-DPC中国联赛正赛 SAG vs XG BO3 第二场 3月5日
2021/03/11 DOTA
跟老齐学Python之不要红头文件(1)
2014/09/28 Python
简单的Python的curses库使用教程
2015/04/11 Python
python对离散变量的one-hot编码方法
2018/07/11 Python
对python添加模块路径的三种方法总结
2018/10/16 Python
Python使用Opencv实现图像特征检测与匹配的方法
2019/10/30 Python
解决Pycharm的项目目录突然消失的问题
2020/01/20 Python
Python字符串hashlib加密模块使用案例
2020/03/10 Python
详解使用python3.7配置开发钉钉群自定义机器人(2020年新版攻略)
2020/04/01 Python
基于python模拟TCP3次握手连接及发送数据
2020/11/06 Python
HTML5的语法变化介绍
2013/08/13 HTML / CSS
美国波西米亚风格服装品牌:Show Me Your Mumu
2018/01/05 全球购物
Under Armour西班牙官网:美国知名的高端功能性运动品牌
2018/12/12 全球购物
MAC Cosmetics巴西官方网站:M·A·C彩妆
2019/04/18 全球购物
加拿大的标志性百货公司:Hudson’s Bay(哈得逊湾)
2019/09/03 全球购物
迪卡侬比利时官网:Decathlon比利时
2019/12/28 全球购物
什么是组件架构
2016/05/15 面试题
2014年教师节寄语
2014/08/11 职场文书
2016简历自荐信优秀范文
2016/01/29 职场文书
golang日志包logger的用法详解
2021/05/05 Golang