解决了Ajax、MySQL 和 Zend Framework 的乱码问题
解决了Ajax、MySQL 和 Zend Framework 的乱码问题
发布时间:2016-12-29 来源:查字典编辑
摘要:问题:在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'");

推荐文章
猜你喜欢
附近的人在看
推荐阅读
拓展阅读
相关阅读
网友关注
最新php教程学习
热门php教程学习
编程开发子分类