解决了Ajax、MySQL 和 Zend Framework 的乱码问题

2015-01-24信息快讯网
问题:
在 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'");
zen cart新进商品的随机排序修改方法
php下关于Cannot use a scalar value as an array的解决办法
PHP Array交叉表实现代码
PHP合并数组+与array_merge的区别分析
PHP Stream_*系列函数
PHP中的array数组类型分析说明
ionCube 一款类似zend的PHP加密/解密工具
PHP array 的加法操作代码
由php的call_user_func传reference引发的思考
UCenter中的一个可逆加密函数authcode函数代码
php将会员数据导入到ucenter的代码
AMFPHP php远程调用(RPC, Remote Procedure Call)工具 快速入门教程
mysql From_unixtime及UNIX_TIMESTAMP及DATE_FORMAT日期函数
php && 逻辑与运算符使用说明
php foreach 使用&(与运算符)引用赋值要注意的问题
Zend framework处理一个http请求的流程分析
PHP MYSQL乱码问题,使用SET NAMES utf8校正
php 网页游戏开发入门教程一(webgame+design)
frename PHP 灵活文件命名函数 frename
php中$_SERVER[PHP_SELF] 和 $_SERVER[SCRIPT_NAME]之间的区别
Zend 输出产生XML解析错误
php Try Catch异常测试
PHP 加密/解密函数 dencrypt(动态密文,带压缩功能,支持中文)
php array_flip() 删除数组重复元素
php array_intersect()函数使用代码
php zend 相对路径问题
PDP Document 代码注释规范第1/2页
PHP Google的translate API代码
Zend Studio for Eclipse的java.lang.NullPointerException错误的解决方法
Zend Studio 无法启动的问题解决方法
php合并数组array_merge函数运算符加号与的区别
攻克CakePHP(PHP中的Ruby On Rails框架)图文介绍第1/2页
IStream与TStream之间的相互转换
mysql 中InnoDB和MyISAM的区别分析小结
来自经典的打造简单的PHP&MYSQL留言板第1/4页
PHP 中dirname(_file_)讲解
一个简单的PHP&MYSQL留言板源码第1/2页
©2014-2024 dbsqp.com