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:
    <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()で符号化された文字列を復号します.