2015-09-14 29 views
6

Tôi đã mã hóa tên Ba Tư trong php tệp. trước khi mã hóa nó được hiển thị chính xác và sau khi mã hóa nó chuyển đổi thành các ký tự utf-8. và tôi đang nhận nó trong java Script (jQuery) Bởi Ajax.cách phân tích cú pháp utf-8 json trong jquery

sample.php:

json_encode('نام خانوادگی '); 

//after encode: "\u06a9\u0627\u0638\u0645\u06a9\u06cc" 

Js: 
JSON.parse(response) 
// it is still in this form: \u06a9\u0627\u0638\u0645 \u06a9\u06cc 

làm thế nào để phân tích json này để tôi có thể có nó ở dạng ban đầu của nó?

+0

thử hiển thị ở đâu đó, có thể sẽ được xuất ra như bạn mong đợi. – keune

+0

@keune nó được hiển thị với những mã số trong console.log và cũng trong html hiển thị –

+0

@mohammadeslahisani Tôi đã thêm câu trả lời cho câu trả lời của tôi để bạn có thể kiểm tra cách hoạt động của nó. –

Trả lời

1

Điều này không liên quan gì đến UTF-8, nhưng với Unicode. Sự khác biệt là:

var original = "\u06a9\u0627\u0638\u0645\u06a9\u06cc" 
var encoded = "\\u06a9\\u0627\\u0638\\u0645\\u06a9\\u06cc" 

Bạn phải chuyển đổi chuỗi biểu diễn ký hiệu Unicode trở lại chuỗi gốc. Sử dụng điều này:

var r = encoded.replace(/\\u(....)/gi, function(m,v){ 
    return String.fromCharCode(parseInt(v,16)) 
}) 
alert(r) 
1

Cố gắng để chuyển đổi dữ liệu sang Base64 chuỗi và trở lại chuỗi bình thường:

Here is the fiddle mà bạn có thể thử mã

sử dụng này:

var Base64 = { 


    _keyStr: "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz/=", 


    encode: function (input) { 
     var output = ""; 
     var chr1, chr2, chr3, enc1, enc2, enc3, enc4; 
     var i = 0; 

     input = Base64._utf8_encode(input); 

     while (i < input.length) { 

      chr1 = input.charCodeAt(i++); 
      chr2 = input.charCodeAt(i++); 
      chr3 = input.charCodeAt(i++); 

      enc1 = chr1 >> 2; 
      enc2 = ((chr1 & 3) << 4) | (chr2 >> 4); 
      enc3 = ((chr2 & 15) << 2) | (chr3 >> 6); 
      enc4 = chr3 & 63; 

      if (isNaN(chr2)) { 
       enc3 = enc4 = 64; 
      } else if (isNaN(chr3)) { 
       enc4 = 64; 
      } 

      output = output + this._keyStr.charAt(enc1) + this._keyStr.charAt(enc2) + this._keyStr.charAt(enc3) + this._keyStr.charAt(enc4); 

     } 

     return output; 
    }, 


    decode: function (input) { 
     var output = ""; 
     var chr1, chr2, chr3; 
     var enc1, enc2, enc3, enc4; 
     var i = 0; 

     input = input.replace(/[^A-Za-z0-9\+\/\=]/g, ""); 

     while (i < input.length) { 

      enc1 = this._keyStr.indexOf(input.charAt(i++)); 
      enc2 = this._keyStr.indexOf(input.charAt(i++)); 
      enc3 = this._keyStr.indexOf(input.charAt(i++)); 
      enc4 = this._keyStr.indexOf(input.charAt(i++)); 

      chr1 = (enc1 << 2) | (enc2 >> 4); 
      chr2 = ((enc2 & 15) << 4) | (enc3 >> 2); 
      chr3 = ((enc3 & 3) << 6) | enc4; 

      output = output + String.fromCharCode(chr1); 

      if (enc3 != 64) { 
       output = output + String.fromCharCode(chr2); 
      } 
      if (enc4 != 64) { 
       output = output + String.fromCharCode(chr3); 
      } 

     } 

     output = Base64._utf8_decode(output); 

     return output; 

    }, 

    _utf8_encode: function (string) { 
     string = string.replace(/\r\n/g, "\n"); 
     var utftext = ""; 

     for (var n = 0; n < string.length; n++) { 

      var c = string.charCodeAt(n); 

      if (c < 128) { 
       utftext += String.fromCharCode(c); 
      } 
      else if ((c > 127) && (c < 2048)) { 
       utftext += String.fromCharCode((c >> 6) | 192); 
       utftext += String.fromCharCode((c & 63) | 128); 
      } 
      else { 
       utftext += String.fromCharCode((c >> 12) | 224); 
       utftext += String.fromCharCode(((c >> 6) & 63) | 128); 
       utftext += String.fromCharCode((c & 63) | 128); 
      } 

     } 

     return utftext; 
    }, 

    _utf8_decode: function (utftext) { 
     var string = ""; 
     var i = 0; 
     var c = c1 = c2 = 0; 

     while (i < utftext.length) { 

      c = utftext.charCodeAt(i); 

      if (c < 128) { 
       string += String.fromCharCode(c); 
       i++; 
      } 
      else if ((c > 191) && (c < 224)) { 
       c2 = utftext.charCodeAt(i + 1); 
       string += String.fromCharCode(((c & 31) << 6) | (c2 & 63)); 
       i += 2; 
      } 
      else { 
       c2 = utftext.charCodeAt(i + 1); 
       c3 = utftext.charCodeAt(i + 2); 
       string += String.fromCharCode(((c & 15) << 12) | ((c2 & 63) << 6) | (c3 & 63)); 
       i += 3; 
      } 

     } 

     return string; 
    } 

} 

các bạn có thể sử dụng như:

Base64.encode(yourString); 
Base64.decode(returnValue); 
Các vấn đề liên quan