如何为JavaScript和JSON正确编码UTF-8?

时间:2012-04-13 13:46:59

标签: php javascript json encoding utf-8

我在创建输入验证哈希时遇到问题。 JavaScript将数据提交给API,API使用json_encode验证发送的数据。基本上它的工作原理如下:

$input=array('name'='John Doe','city'=>'New York');
$validationHash=sha1(json_encode($input).$key); // Key is known to both servers

如果PHP连接到另一台服务器,那么一切正常。它也可以通过JavaScript工作(我也有自定义sha1()函数):

var validationHash = sha1(JSON.stringify({'name':'John Doe','city'=>'New York'})+ key);

当字符串包含UTF-8字符时,我的问题出现了。例如,如果其中一个值为:

Ränisipelgasöösel

然后,接收该命令的PHP服务器在JSON编码后将其转换为此:

R\u00e4nisipelgas\u00f6\u00f6sel

我也需要在JavaScript中执行此操作,但我无法弄清楚如何操作。我需要确保向服务器发送适当的验证哈希或命令失败。我在Google上发现可以使用unescape(encodeURIComponent(string))和decodeURIComponent(),但它们都没有给我与PHP相同的字符串并验证。

在客户端和服务器上都使用UTF-8。

有什么想法吗?

4 个答案:

答案 0 :(得分:2)

似乎不可能。我发现唯一可行的解​​决方案是在浏览器端使用encodeURIComponent()编码所有数据,在PHP端使用rawurlencode()编码,然后从数组中的这些值计算JSON。

答案 1 :(得分:0)

我的解决方法是对原始url编码我的json数据。

rawurlencode( json_encode( $data ) );

然后从javascript中解码原始url编码的json,然后像这样解析json字符串。

JSON.parse( decodeURIComponent( data ) );

希望这有帮助。

答案 2 :(得分:-1)

为什么base64不对数据进行编码以便安全传输?它在一个安全的字符串中编码UTF-8字符,可以通过不同的介质发送 - php,javascript等。这样你就可以在接收端对字符串进行base64解码。瞧!

通过base64编码数据,我的意思是base64编码值而不是整个json字符串

答案 3 :(得分:-2)

你是html页面编码utf-8吗?

  

<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">