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

 2025-01-15  阅读 226  评论 8  点赞 454

摘要:问题: 在 google map 上用 ajax 以 get 方式向服务器传递数据时,服务器端显示为 url 乱码, zend framework 向 mysql 存储数据为乱码,但是提取出来又是正常中文字体, mysql 中输入中文,显示在 php 网页上为乱码。 解决方式: 1. ajax 的 url 编码需要转换,我使用的如下
问题:
在 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'");

标签:phpphp教程

评论列表:

显示更多评论

发表评论:

管理员

承接各种程序开发,外贸网站代运营,外贸网站建设等项目
  • 内容2460
  • 积分67666
  • 金币86666

Copyright © 2024 LS'Blog-保定PHP程序员老宋个人博客 Inc. 保留所有权利。 Powered by LS'blog 3.0.3

页面耗时0.0274秒, 内存占用1.93 MB, 访问数据库29次

冀ICP备19034377号