POST查询后,口音会自动替换为数字

时间:2013-03-10 19:40:46

标签: php encoding http-post bitbucket

每当提交时,Bitbucket对个人页面的POST查询都有问题:加重的字符被数字替换。

以下是我用于提交的消息:Démo test éà

以下是我的网页获取的内容:Du00e9mo test u00e9u00e0

  • 我尝试使用uft8_decodeutf8_encodeiconv(使用UTF-8和 ISO-8859-1)和其他(基于我发现的帖子)
  • 我用UTF-8
  • 保存了我的脚本
  • 我尝试使用header('Content-Type: text/html; charset=UTF-8');

1 个答案:

答案 0 :(得分:1)

如果从JSON编码的字符串中删除了反斜杠\,则会发生这种情况。 UTF编码是正确的(è正确00e9)。

如果您在代码中使用stripslashes,请在 json_decode后使用映射函数,不要或使用它(但不一定必要)。

这就是流氓stripslashes会做的事情:

<?php print json_decode(stripslashes(json_encode("Démo test éà"))) . "\n"; ?>

Du00e9mo test u00e9u00e0

如果您无法控制界面,可以尝试反向运行该过程以获取正确的字符串。这有点像一个可怕的黑客,并不是非常强大,所以我只把它用作非常的最后手段

<?php

$string = "Du00e9mo test u00e9u00e0";

$correct = preg_replace("/u([0-9a-f][0-9a-f][0-9a-f][0-9a-f])/", '\\u\\1', json_encode($string));

$string = json_decode($correct);

print "Output: $string\n";

?>

Output: Démo test éà