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

7 篇文章 0 订阅
5 篇文章 0 订阅

    功夫不负有心人,花了将近一天时间,终于解决了Ajax 、MySQL 和 Zend Framework 的乱码问题。现在总结如下,以供参考。

 

问题:

    在 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'");
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值