問題:
Google Map上でAjaxを使用してgetモードでサーバーにデータを送信すると、サーバー側でURLが文字化けして表示されます
Zend FrameworkはMySQLにデータを文字化けとして保存しますが、抽出すると通常の中国語フォントになります。
MySQL に中国語を入力すると、PHP Web ページに表示されるコードが文字化けします。
解決策:
1. Ajax URL エンコーディングを変換する必要があります。次の関数を使用します。
$ret = ''; $i = 0; $i < $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 接続の場合は、次のように設定します:
// マーカー テーブル内のすべての行を選択します
$query = "SELECT * FROM markers WHERE 1";
//データベースを選択した後にこの文を追加します
mysql_query("SET CHARACTER SET utf8"); '");
上記は、Ajax、MySQL、Zend Framework の文字化け問題を解決するための zend フレームワークを紹介しており、zend フレームワークの内容も含めて、PHP チュートリアルに興味のある友人に役立つことを願っています。