解决了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 n个不重复的随机数生成代码
Jun 23 PHP
php设计模式 Delegation(委托模式)
Jun 26 PHP
深入php中var_dump方法的使用详解
Jun 24 PHP
三种php连接access数据库方法
Nov 11 PHP
用 Composer构建自己的 PHP 框架之构建路由
Oct 30 PHP
php使用substr()和strpos()联合查找字符串中某一特定字符的方法
May 12 PHP
windows平台中配置nginx+php环境
Dec 06 PHP
PHP中常用的数组操作方法笔记整理
May 16 PHP
thinkphp3.2实现在线留言提交验证码功能
Jul 19 PHP
thinkPHP+mysql+ajax实现的仿百度一下即时搜索效果详解
Jul 15 PHP
Laravel 创建指定表 migrate的例子
Oct 09 PHP
php5与php7的区别点总结
Oct 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
将博客园(cnblogs.com)数据导入到wordpress的代码
2013/01/06 PHP
PHP连接SQLServer2005方法及代码
2013/12/26 PHP
PHP中使用curl入门教程
2015/07/02 PHP
PHP+MySQL之Insert Into数据插入用法分析
2015/09/27 PHP
Yii2中关联查询简单用法示例
2016/08/10 PHP
20个非常有用的PHP类库 加速php开发
2010/01/15 Javascript
js 模拟气泡屏保效果代码
2010/07/10 Javascript
用JavaScript对JSON进行模式匹配 (Part 2 - 实现)
2010/07/17 Javascript
js导出txt示例代码
2014/01/14 Javascript
setInterval计时器不准的问题解决方法
2014/05/08 Javascript
jquery popupDialog 使用 加载jsp页面的方法
2016/10/25 Javascript
详解jQuery简单的表格应用
2016/12/16 Javascript
浅谈JavaScript的函数及作用域
2016/12/30 Javascript
JS中的作用域链
2017/03/01 Javascript
JS触摸与手势事件详解
2017/05/09 Javascript
详解无限滚动插件vue-infinite-scroll源码解析
2019/05/12 Javascript
JS的时间格式化和时间戳转换函数示例详解
2020/07/27 Javascript
Python strip lstrip rstrip使用方法
2008/09/06 Python
python针对excel的操作技巧
2018/03/13 Python
python去除文件中重复的行实例
2018/06/29 Python
python如何生成各种随机分布图
2018/08/27 Python
Python读取excel指定列生成指定sql脚本的方法
2018/11/28 Python
这可能是最好玩的python GUI入门实例(推荐)
2019/07/19 Python
Pytorch通过保存为ONNX模型转TensorRT5的实现
2020/05/25 Python
Python基于xlutils修改表格内容过程解析
2020/07/28 Python
不同浏览器对CSS3和HTML5的支持状况
2009/10/31 HTML / CSS
服装销售人员求职自我评价
2013/09/26 职场文书
一岗双责责任书
2014/04/15 职场文书
党员干部观看《周恩来四个昼夜》思想汇报
2014/09/10 职场文书
群众路线个人整改方案
2014/10/25 职场文书
2014年六五普法工作总结
2014/11/25 职场文书
一年级语文上册复习计划
2015/01/17 职场文书
迎新晚会主持词开场白
2015/05/28 职场文书
信用卡收入证明范本
2015/06/12 职场文书
go goroutine 怎样进行错误处理
2021/07/16 Golang
gateway与spring-boot-starter-web冲突问题的解决
2021/07/16 Java/Android