ノリブログ?

PHP - トラックバック送信プログラムの文字化け - UTF-8の半角スペースの文字コード「C2A0」

カテゴリー:PHP

問題
PHPでトラックバックの送信プログラムをUTF-8で作成した。
ところがトラックバックを送信すると半角スペースが「??」に文字化けしてトラックバック先に送られていた。

この原因を調べてみるとトラックバックを送信する際に半角スペースが文字コード:C2A0になっていることがわかった。(UTF-8はASCIIと上位互換があり半角スペースを文字コード「C2A0」,「20」のどちらでも表示する)

これはトラックバックデータを送信するプログラムに、1つ前のプログラムから中のフォームのhiddenの内容を渡される際に が文字コード「C2A0」に変換されることによるものだった。


具体例

  • headのmetaタグ指定例
    <meta content="text/html; charset=UTF-8" http-equiv="content-type">
  • 送信元コード例
  •  <form method="post" action="test3.php">
    <input type="hidden" name="test" value="te&nbsp;st" />
    <input type="submit" />
    </form>
  • 送信先コード例
    <?php echo $_POST["test"];?>

上記の例だと送信もとのinputの値が「te&nbsp;st」になっているのに送信先のechoの結果は「te st」になっており が半角スペースに自動変換されていた。
またこの半角スペースをrawurlencodeして文字コードを表示させると
te%C2%A0st
となっており、スペースの文字コードが「C2A0」になっている。
どうやらこれはブラウザ側がinput hidden内における&nbsp;をUTF-8の文字コード「C2A0」に変換しているようだ。
そしてそれをトラックバック先に送信すると受信先が文字コード「C2A0」をうまく処理できていないため文字化けしていると思われる。


なお、この記事に本文に関係のないトラックバックやコメントがついているのはトラックバック機能のテストを行ったためです。

関連記事

Track Back URL

name
E-mail(省略可)
URL(省略可)
コメント