手机
当前位置:查字典教程网 >编程开发 >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 的乱码问题】相关文章:

第十二节 类的自动加载 [12]

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

汉字转化为拼音(php版)

用PHP代码在网页上生成图片

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

新版mysql+apache+php Linux安装指南

Mysql 4.1 Windows 下升级问题

用PHP 4.2书写安全的脚本

简单解决新浪SAE无法上传文件的问题

用PHP连接Oracle for NT 远程数据库

精品推荐
分类导航