0

コミットが行われるたびに、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');
4

1 に答える 1

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 éà
于 2013-03-10T19:56:21.203 に答える