phpとajaxのインタラクティブな中国語文字化けし(文字列変換)
4686 ワード
一.バックグラウンドから届いたjsonは処理せず、フロントエンドresult.nameはこのように文字化けしを呼び出します.urldecodeを使用してjsonencodをトランスコードする必要があります
注意jsonはutf-8符号化文字のみを受け入れるのでjson_Encode()のパラメータはutf-8符号化でなければなりません.そうしないと、空の文字またはnullが得られます.
バックグラウンド:
if(!empty($chatData)){
echo urldecode(json_encode($chatData));
$testJSON=array('name'=>'中国語文字列','value'=>'test');
//echo json_encode($testJSON); foreach ( $testJSON as $key => $value ) {
$testJSON[$key] = urlencode ( $value ); }
echo urldecode ( json_encode ( $testJSON ) );
?>
次のように出力を表示します.
{「name」:「中国語文字列」,「value」:「test」}
二.フロントajaxがバックグラウンドに渡されます
1.
$.ajax({ url:url, type:"POST", data:data, contentType:"application/x-www-form-urlencoded; charset=utf-8", dataType:"json", success: function(){ ... }})
2.使用:encodeURIComponent文字変換
解決方法1は、ファイル符号化、データベース符号化、ウェブページcontent-type符号化を含む符号化の統一を維持し、中国語ではUTF-8を使用することをお勧めします.gbk/gb 2312を使用すると文字化けしてしまう可能性があります.getgetではなくpostを使用して送信すると、リンクを通じてパラメータが伝達され、自動的にurlEncode(符号化)されますが、ブラウザごとに符号化の仕方が異なる場合があります.postを使用すると、このような状況を避けることができます.3.jsフロントエンドescape符号化により再送信し、取得データ(decodeURI()またはdecodeURIComponent()decodeURIComponent()関数をバックグラウンド復号することによりencodeURIComponent()関数符号化のURIを復号することができる.
4、グローバルにcontentTypeを設定し、jquery ajaxはutf-8を使用して送信データを符号化しているため、ieは送信時にcharset=utf-8を付加していないため、符号化を指定する(IEはiso-8859-1符号化をデフォルトで使用する)
例1:
出力:
例2:
.ajax({ type:"get", cache:false, contentType:"application/x-www-form-urlencoded:charset=UTF-8", url:"ajaxpage.aspx?t=smrz&name="+escape(name)+"&zjtype="+escape(type)+"&zjnum="+escape(zjnum)+"", dataType:"json", success:function(data){ alert(data.info); } })
三.最上位関数(グローバル関数)
関数#カンスウ#
説明
decodeURI()
ある符号化されたURIを復号する.
decodeURIComponent()
符号化されたURIコンポーネントを復号する.
encodeURI()
文字列をURIに符号化する.
encodeURIComponent()
文字列をURIコンポーネントとして符号化する.
escape()
文字列をエンコードします.
eval()
JavaScript文字列を計算し、スクリプトコードとして実行します.
getClass()
JavaObjectのJavaClassを返します.
isFinite()
値が無限の数であるかどうかを確認します.
isNaN()
値が数値であるかどうかを確認します.
Number()
オブジェクトの値を数値に変換します.
parseFloat()
文字列を解析し、浮動小数点数を返します.
parseInt()
文字列を解析し、整数を返します.
String()
オブジェクトの値を文字列に変換します.
unescape()
escape()で符号化された文字列を復号します.
注意jsonはutf-8符号化文字のみを受け入れるのでjson_Encode()のパラメータはutf-8符号化でなければなりません.そうしないと、空の文字またはnullが得られます.
バックグラウンド:
if(!empty($chatData)){
echo urldecode(json_encode($chatData));
//echo json_encode($testJSON);
$testJSON[$key] = urlencode ( $value );
echo urldecode ( json_encode ( $testJSON ) );
?>
次のように出力を表示します.
{「name」:「中国語文字列」,「value」:「test」}
二.フロントajaxがバックグラウンドに渡されます
1.
$.ajax({ url:url, type:"POST", data:data, contentType:"application/x-www-form-urlencoded; charset=utf-8", dataType:"json", success: function(){ ... }})
2.使用:encodeURIComponent文字変換
解決方法1は、ファイル符号化、データベース符号化、ウェブページcontent-type符号化を含む符号化の統一を維持し、中国語ではUTF-8を使用することをお勧めします.gbk/gb 2312を使用すると文字化けしてしまう可能性があります.getgetではなくpostを使用して送信すると、リンクを通じてパラメータが伝達され、自動的にurlEncode(符号化)されますが、ブラウザごとに符号化の仕方が異なる場合があります.postを使用すると、このような状況を避けることができます.3.jsフロントエンドescape符号化により再送信し、取得データ(decodeURI()またはdecodeURIComponent()decodeURIComponent()関数をバックグラウンド復号することによりencodeURIComponent()関数符号化のURIを復号することができる.
4、グローバルにcontentTypeを設定し、jquery ajaxはutf-8を使用して送信データを符号化しているため、ieは送信時にcharset=utf-8を付加していないため、符号化を指定する(IEはiso-8859-1符号化をデフォルトで使用する)
例1:
<script type="text/javascript">
var test1="http://www.w3school.com.cn/My first/"
document.write(encodeURIComponent(test1)
+ "<br />")
document.write(decodeURIComponent(test1)
)
</script>
出力:
http%3A%2F%2Fwww.w3school.com.cn%2FMy%20first%2F
http://www.w3school.com.cn/My first/
例2:
.ajax({ type:"get", cache:false, contentType:"application/x-www-form-urlencoded:charset=UTF-8", url:"ajaxpage.aspx?t=smrz&name="+escape(name)+"&zjtype="+escape(type)+"&zjnum="+escape(zjnum)+"", dataType:"json", success:function(data){ alert(data.info); } })
三.最上位関数(グローバル関数)
関数#カンスウ#
説明
decodeURI()
ある符号化されたURIを復号する.
decodeURIComponent()
符号化されたURIコンポーネントを復号する.
encodeURI()
文字列をURIに符号化する.
encodeURIComponent()
文字列をURIコンポーネントとして符号化する.
escape()
文字列をエンコードします.
eval()
JavaScript文字列を計算し、スクリプトコードとして実行します.
getClass()
JavaObjectのJavaClassを返します.
isFinite()
値が無限の数であるかどうかを確認します.
isNaN()
値が数値であるかどうかを確認します.
Number()
オブジェクトの値を数値に変換します.
parseFloat()
文字列を解析し、浮動小数点数を返します.
parseInt()
文字列を解析し、整数を返します.
String()
オブジェクトの値を文字列に変換します.
unescape()
escape()で符号化された文字列を復号します.