解决了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 相关文章推荐
如何过滤高亮显示非法字符
Oct 09 PHP
通过JavaScript或PHP检测Android设备的代码
Mar 09 PHP
discuz程序的PHP加密函数原理分析
Aug 05 PHP
PHP的博客ping服务代码
Feb 04 PHP
利用php+mcDropdown实现文件路径可在下拉框选择
Aug 07 PHP
php验证是否是md5编码的简单代码
Apr 01 PHP
PHP正则提取不包含指定网址的图片地址的例子
Apr 21 PHP
PHP使用递归方式列出当前目录下所有文件的方法
Jun 02 PHP
在Windows系统下使用PHP生成Word文档的教程
Jul 03 PHP
各种快递查询--Api接口
Apr 26 PHP
PHP实现从上往下打印二叉树的方法
Jan 18 PHP
记Laravel调用Gin接口调用formData上传文件的实现方法
Dec 12 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
BBS(php &amp; mysql)完整版(七)
2006/10/09 PHP
php 获取完整url地址
2008/12/20 PHP
php版微信开发Token验证失败或请求URL超时问题的解决方法
2016/09/23 PHP
php workerman定时任务的实现代码
2018/12/23 PHP
PHP DB 数据库连接类定义与用法示例
2019/03/11 PHP
ExtJS 学习专题(一) 如何应用ExtJS(附实例)
2010/03/11 Javascript
javascript:void(0)的问题使用探讨
2014/04/10 Javascript
nodejs 提示‘xxx’ 不是内部或外部命令解决方法
2014/11/20 NodeJs
微信小程序实战之自定义抽屉菜单(7)
2017/04/18 Javascript
canvas基础绘制-绚丽倒计时的实例
2017/09/17 Javascript
AngularJs用户登录问题处理(交互及验证、阻止FQ处理)
2017/10/26 Javascript
[原创]jquery判断元素内容是否为空的方法
2018/05/04 jQuery
vue项目打包之后背景样式丢失的解决方案
2019/01/17 Javascript
利用d3.js制作连线动画图与编辑器的方法实例
2019/09/05 Javascript
layui实现鼠标移动到单元格上显示数据的方法
2019/09/11 Javascript
JS 逻辑判断不要只知道用 if-else 和 switch条件判断(小技巧)
2020/05/27 Javascript
Nuxt.js nuxt-link与router-link的区别说明
2020/11/06 Javascript
在SAE上部署Python的Django框架的一些问题汇总
2015/05/30 Python
python的else子句使用指南
2016/02/27 Python
python实现用户登录系统
2016/05/21 Python
基于Python 装饰器装饰类中的方法实例
2018/04/21 Python
python字符串判断密码强弱
2020/03/18 Python
Python视频编辑库MoviePy的使用
2020/04/01 Python
解决Django部署设置Debug=False时xadmin后台管理系统样式丢失
2020/04/07 Python
浅析python 定时拆分备份 nginx 日志的方法
2020/04/27 Python
python如何保存文本文件
2020/06/07 Python
canvas需要在标签里直接定义宽高
2014/12/17 HTML / CSS
世界上第一个水枕头:Mediflow
2018/12/06 全球购物
Coccinelle官网:意大利的著名皮具品牌
2019/05/15 全球购物
应聘教师推荐信
2013/10/31 职场文书
放弃继承权公证书
2015/01/23 职场文书
2015年度考核个人工作总结
2015/10/24 职场文书
解除租赁合同协议书
2016/03/21 职场文书
vue首次渲染全过程
2021/04/21 Vue.js
Mysql中调试存储过程最简单的方法
2021/06/30 MySQL
Python Numpy库的超详细教程
2022/04/06 Python