手机
当前位置:查字典教程网 >编程开发 >php教程 >解决了Ajax、MySQL 和 Zend Framework 的乱码问题
解决了Ajax、MySQL 和 Zend Framework 的乱码问题
摘要:问题:在GoogleMap上用Ajax以get方式向服务器传递数据时,服务器端显示为url乱码,ZendFramework向MySQL存储数...

问题:

在 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'");

【解决了Ajax、MySQL 和 Zend Framework 的乱码问题】相关文章:

php4的彩蛋

PHP 高手之路(一)

关于PHP中操作MySQL数据库的一些要注意的问题

php4的session功能评述(二)

PHP脚本监控Nginx 502错误并自动重启php-fpm

PHP4(windows版本)中的COM函数

php数据库连接

解决PHP导出CSV文中文乱码问题

Oracle Faq(Oracle的字符集问题)

php页面缓存ob系列函数介绍

精品推荐
分类导航