代码到文本(PHP,语言)


Code to Text (PHP, languages)

当我使用 AJAX 提交一篇非英文的帖子时,我会得到类似于%u4F60%u662F%u5982%u4F55%u505A%uFF1F我该怎么做才能在 PHP 中解决此问题?我已经尝试过utf8_decode但不起作用。

如果有帮助,我将使用 AJAX 提交文本。

这能做到你想要的吗?

<?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);

我以前从未尝试过将十六进制 UTF-8 代码点转换为二进制,事实证明,当您了解它时,它实际上很容易。当然,它可能仍然在您的浏览器中显示为无意义,具体取决于字符的实际内容 - 您可能需要安装语言包才能正确呈现它们。