解决了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生成静态页面详解
Nov 19 PHP
一个用php实现的获取URL信息的类
Jan 02 PHP
特详细的PHPMYADMIN简明安装教程
Aug 01 PHP
Ajax+PHP边学边练 之五 图片处理
Dec 03 PHP
PHP用SAX解析XML的实现代码与问题分析
Aug 22 PHP
php curl获取网页内容(IPV6下超时)的解决办法
Jul 16 PHP
PHP JSON出错:Cannot use object of type stdClass as array解决方法
Aug 16 PHP
总结的一些PHP开发中的tips(必看篇)
Mar 24 PHP
ThinkPHP中create()方法自动验证实例
Apr 26 PHP
PHP精确到毫秒秒杀倒计时实例详解
Mar 14 PHP
PHP实现数组和对象的相互转换操作示例
Mar 20 PHP
php使用lua+redis实现限流,计数器模式,令牌桶模式
Apr 04 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 字符串函数收集
2010/03/29 PHP
PHP之COOKIE支持详解
2010/09/20 PHP
PHP缓存技术的多种方法小结
2012/08/14 PHP
解析CodeIgniter自定义配置文件
2013/06/18 PHP
编写PHP脚本来实现WordPress中评论分页的功能
2015/12/10 PHP
PHP用continue跳过本次循环中剩余代码的注意点
2017/06/27 PHP
THINKPHP5.1 Config的配置与获取详解
2020/06/08 PHP
JavaScript 学习笔记(五)
2009/12/31 Javascript
javascript 树形导航菜单实例代码
2013/08/13 Javascript
JavaScript保留两位小数的2个自定义函数
2014/05/05 Javascript
jQuery 过滤方法filter()选择具有特殊属性的元素
2014/06/15 Javascript
Javascript递归打印Document层次关系实例分析
2015/05/15 Javascript
谈谈JavaScript类型系统之Math
2016/01/06 Javascript
理解JS事件循环
2016/01/07 Javascript
移动端jQuery修正Web页面滑动时div问题的两则实例
2016/05/30 Javascript
jQuery插件FusionCharts实现的2D面积图效果示例【附demo源码下载】
2017/03/06 Javascript
JavaScript编写棋盘覆盖代码详解
2017/08/28 Javascript
javascript将list转换成树状结构的实例
2017/09/08 Javascript
详解JavaScript中new操作符的解析和实现
2020/09/04 Javascript
[01:43]倾听DOTA2英雄之声 魅惑魔女国服配音鉴赏
2013/06/06 DOTA
[05:09]DOTA2-DPC中国联赛2月22日Recap集锦
2021/03/11 DOTA
使用python判断jpeg图片的完整性实例
2019/06/10 Python
Python批量查询关键词微信指数实例方法
2019/06/27 Python
Pytorch卷积层手动初始化权值的实例
2019/08/17 Python
Python全栈之列表数据类型详解
2019/10/01 Python
django实现类似触发器的功能
2019/11/15 Python
Tensorflow--取tensorf指定列的操作方式
2020/06/30 Python
纯CSS3实现3D旋转书本效果
2016/03/21 HTML / CSS
20佳惊艳的HTML5应用程序示例分享
2011/05/03 HTML / CSS
介绍一下Linux文件的记录形式
2013/09/29 面试题
大学生新闻专业个人自我评价
2013/11/12 职场文书
授权委托书范本
2014/04/03 职场文书
村庄绿化方案
2014/05/07 职场文书
工商管理专业毕业生求职信
2014/05/26 职场文书
2014银行授权委托书样本
2014/10/04 职场文书
新生入学欢迎词
2015/01/26 职场文书