0

英語以外のAJAXで投稿を送信すると、次のようなもの%u4F60%u662F%u5982%u4F55%u505A%uFF1F が表示されます。PHPでこれを修正するにはどうすればよいですか?試しましたがutf8_decode、機能しません。

それが助けになるなら、私はAJAXでテキストを提出しています。

4

1 に答える 1

2

これはあなたが望むことをしますか?

<?php

  function utf8_urldecode ($str) {
    return urldecode(preg_replace_callback('/%u([0-9A-F]{4,6})/i', function($matches) {
      $int = hexdec($matches[1]);
      switch (TRUE) {
        case $int < 0x80:
          return pack('C*', $int & 0x7F);
        case $int < 0x0800:
          return pack('C*', (($int & 0x07C0) >> 6) | 0xC0, ($int & 0x3F) | 0x80);
        case $int < 0x010000:
          return pack('C*', (($int & 0xF000) >> 12) | 0xE0, (($int & 0x0FC0) >> 6) | 0x80, ($int & 0x3F) | 0x80);
        case $int < 0x110000:
          return pack('C*', (($int & 0x1C0000) >> 18) | 0xF0, (($int & 0x03F000) >> 12) | 0x80, (($int & 0x0FC0) >> 6) | 0x80, ($int & 0x3F) | 0x80);
        default:
          return $matches[0];
      }
    }, $str));
  }

  $str = "%u4F60%u662F%u5982%u4F55%u505A%uFF1F";

  echo utf8_urldecode($str);

私はこれまで16進数のUTF-8コードポイントを2進数に変換しようとしたことがありませんが、頭を悩ませるのは実際には非常に簡単です。もちろん、実際の文字によっては、ブラウザにナンセンスとして表示される場合があります。正しくレンダリングするには、言語パックをインストールする必要があります。

于 2012-05-17T23:59:17.820 に答える