ホームページ > バックエンド開発 > PHPチュートリアル > PHP 配列によって JavaScript および json_encode_PHP に渡される gbk 中国語の文字化けコードの解決方法のチュートリアル

PHP 配列によって JavaScript および json_encode_PHP に渡される gbk 中国語の文字化けコードの解決方法のチュートリアル

WBOY
リリース: 2016-07-13 10:56:20
オリジナル
962 人が閲覧しました

この記事では、PHP 配列を JavaScript と json_encode に渡すときに発生する gbk 中国語の文字化けの解決策を紹介します。以下は、JSON 関数の作成です。この段落は、インターネット上の某ヒーローからのものです。

コードは次のとおりですコードをコピー
/*************************************************** * **********

*
* 特定の関数を使用して配列内のすべての要素を処理します
* @param string &$array 処理対象の文字列
* @param string $function 実行する関数
* @return boolean $apply_to_keys_only キーにも適用するかどうか
* @アクセス公開
*
************************************************* * ***********/
function arrayRecursive(&$array, $function, $apply_to_keys_only = false)
{
foreach ($array as $key => $value) {
If (is_array($value)) {
arrayRecursive($array[$key], $function, $apply_to_keys_only);
} else {
$array[$key] = $function($value);
}

if ($apply_to_keys_only && is_string($key)) {

$new_key = $function($key);
If ($new_key != $key) {
$array[$new_key] = $array[$key];
unset($array[$key]);
}
}
}
}

/*************************************************** * **********

*
* 配列を JSON 文字列に変換します (中国語と互換性があります)
* @param array $array 変換する配列
* @return string 変換されたjson文字列
* @アクセス公開
*
************************************************* * ***********/
関数 JSON($array) {
arrayRecursive($array, 'urlencode', true);
$json = json_encode($array);
urldecode($json)を返します;
}

データベースに接続し、配列 $array1 の値を取得します

コードは次のとおりですコードをコピー

配列array1がJavaScriptに配列ability1に渡されます

$dbcnx = @mysql_connect ( "localhost", "root", "1234" );

if (! $dbcnx) {
echo (「現時点ではデータベース サーバーに接続できません。」);
終了 ();
}

if (! @mysql_select_db ( "pms" )) {

echo ("現時点ではジョーク " . "データベースが見つかりません。");
終了 ();
}

mysql_query ( "SET NAMES 'GB2312'" );

$q=mysql_query("ALV = 1 の能力から * を選択"); While($row=mysql_fetch_array($q)){

$array1[] = $row[AName];
}

コードは次のとおりです コードをコピー


<スクリプトタイプ="text/javascript">
varability1=;
var a=eval("能力1");
アラート(a[0]);

JSON中国語文字化けコードに対する別の解決策


中国語の場合は注意してください

オンラインで解決策を見つけました:

標準 Base64 は、URL での直接送信には適していません。これは、URL エンコーダーが標準 Base64 の「/」と「+」文字を「%XX」の形式に変更し、これらの「%」文字が保存時に含まれるためです。 ANSI SQL では「%」記号がワイルドカード文字として使用されているため、データベースに変換する必要があります。
コードは次のとおりです コードをコピー


/* json_encode の中国語文字化けを処理します */
$data = array ('game' => '火と氷の国', 'name' => '茨の精霊', 'country' => '霜の国', 'level' =>
); エコー json_encode ( $data ); エコー「
」; $newData = 配列 (); foreach ( $data as $key => $value ) {
$newData [$key] = urlencode ( $value ); }
echo urldecode ( json_encode ( $newData ) ); ?>





後で他の人にアドバイスを求めたところ、base64エンコーディングも使用できますが、Baiduは次のように説明しました。

ただし、私のデータは POST 経由で送信され、HTTP ヘッドではなくメッセージ本文にあるため、影響を受けません。

json_encode は utf-8 形式のデータのみを受け入れることができます

例: json_encode 処理後、「Xu」は「u80e5」になり、最終的な json の中国語部分は Unicode エンコーディングに置き換えられます。私たちが解決しなければならないのは、オブジェクトを json に変換し、オブジェクト内の中国語が json 内で通常の中国語として表示されるようにすることです。json_encode を使用するだけでは目標を達成できないようです。

私の解決策:最初にクラス内の中国語フィールドをURLエンコード(urlencode)し、次にオブジェクトをJSONエンコード(jsonencode)し、最後にJSON、つまり最後のJSONをURLデコード(urldecode)します。内部の中国語は依然として同じ中国語です!

テストコードは次のとおりです:




コードは次のとおりです

コードをコピー パブリック $item1 = 1; パブリック $item2 = '中国語'; 関数 to_json() { //URL エンコード、中国語を Unicode に変換する json_encode を回避します
クラス myClass {
$this->item2 = urlencode($this->item2); $str_json = json_encode($this); // URL をデコードし、オブジェクト属性が変更されないように JSON に変換した後に各属性を返します

$this->item2 = urldecode($this->item2); urldecode($str_json)を返します
}
}
$c = 新しい myClass(); エコー json_encode($c); エコー '
'; エコー $c->to_json(); エコー '
'; エコー json_encode($c); エコー '
'; echo json_encode('襥'); ?>

プログラム出力結果:

{"アイテム1":1,"アイテム2":"u4e2du6587"}
{"item1":1,"item2":"中文"}
{"アイテム1":1,"アイテム2":"u4e2du6587"}
「u80e5」






メモは http://www.bKjia.c0m/phper/php/42865.htm でご覧いただけます



www.bkjia.comtru​​ehttp://www.bkjia.com/PHPjc/632186.html技術記事この記事では、PHP 配列によって JavaScript と json_encode に渡される gbk 中国語の文字化けコードの解決策を紹介しています。この段落は、インターネット上のヒーローのコードから来ており、次のようにコピーされています。
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート