【问题标题】:php unicode 16 bitphp unicode 16位
【发布时间】:2011-07-12 22:39:06
【问题描述】:

如何将 16 位 unicode 字符附加到 php 中的字符串

$test = "testing" . (U + 199F);

据我所知,\x 只需要 8 位字符,即 ascii

【问题讨论】:

  • 只传递文字字符?在这里工作。
  • 没有 16 位 Unicode 字符这样的东西。 Unicode 是 21 位。
  • 如果您认为 Unicode 是“2 个字节”,那么您需要学习的东西很多。不是。
  • @Drake - unicode 代码点从 0 到 1,114,111 运行(请参阅unicode.org/faq//utf_bom.html#utf16-1 的 unicode 常见问题解答)。 UTF-16 使用单个 16 位编码最常见的 63k 字符,并为其他 1m 个代码点使用一对 16 位(代理)。

标签: php unicode character-encoding


【解决方案1】:

来自the manual:

PHP 仅支持 256 个字符集,因此不提供原生 Unicode 支持。

我想你可以输入手动编码的 UTF-8 序列。

您还可以输入 UCS4 作为字节序列,并使用iconv("UTF-32LE", "UTF-8", $str); 将其转换为 UTF-8 以进行进一步处理。您不能一次性将代码点输入为 32 位代码单元。

【讨论】:

    【解决方案2】:

    Unicode 字符在 PHP(*) 中并不直接存在,但您可以处理包含字节的字符串,以 UTF-8 编码表示字符。这是将数字字符代码点转换为 UTF-8 的一种方法:

    function unichr($i) {
        return iconv('UCS-4LE', 'UTF-8', pack('V', $i));
    }
    
    $test= 'testing'.unichr(0x199F);
    

    (*: 和 '16-bit' Unicode 字符根本不存在;Unicode 的代码点远远超出 U+FFFF。在 UTF-16 中有 16-bit 'code units',但这是一种丑陋的编码你不太可能在 PHP 中遇到。)

    【讨论】:

      【解决方案3】:

      因为 unicode 只是多字节,而 PHP 只支持单字节,所以您可以创建具有多个单字节的多字节字符 :)

      $test = "testing\x19\x9F";
      

      【讨论】:

        【解决方案4】:

        试试:

        $test = "testing" . "\u199F";
        

        【讨论】:

        • 已经有了,根本不工作,我相信php甚至不支持“\u”。
        猜你喜欢
        • 1970-01-01
        • 2022-10-14
        • 2011-10-16
        • 2013-03-14
        • 2012-09-07
        • 2021-04-16
        • 2018-09-30
        • 2019-05-10
        • 1970-01-01
        相关资源
        最近更新 更多