加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > PHP教程 > 正文

PHP构造一个Unicode字符串?

发布时间:2020-12-13 18:20:27 所属栏目:PHP教程 来源:网络整理
导读:给定想要从CLI PHP脚本输出的字符的Unicode十进制或十六进制数,PHP如何生成它? chr()函数似乎没有生成正确的输出.这是我的测试脚本,使用Section Break字符U 00A7(十六进制中的A7,十进制中的167,应该用UTF-8中的C2 A7表示)作为测试: ?phpecho "Section sign
给定想要从CLI PHP脚本输出的字符的Unicode十进制或十六进制数,PHP如何生成它? chr()函数似乎没有生成正确的输出.这是我的测试脚本,使用Section Break字符U 00A7(十六进制中的A7,十进制中的167,应该用UTF-8中的C2 A7表示)作为测试:
<?php
echo "Section sign: ".chr(167)."n"; // Using CHR function
echo "Section sign: ".chr(0xA7)."n";
echo "Section sign: ".pack("c",0xA7)."n"; // Using pack function?
echo "Section sign: §n"; // Copy and paste of the symbol into source code

我得到的输出(通过SSH会话到服务器)是:

Section sign: ?
Section sign: ?
Section sign: ?
Section sign: §

因此,这证明我正在使用的终端字体中包含Section Break字符,并且SSH连接正在成功发送它,但是chr()在从代码编号构造它时没有正确构造它.

如果我所拥有的只是代码编号而不是复制/粘贴选项,我有什么选择?

在排除mb_ functions和iconv时,PHP不了解Unicode.你必须自己编写UTF-8编码字符.

为此,维基百科有一个关于UTF-8结构的excellent overview.这是基于该文章的快速,肮脏和未经测试的功能:

function codepointToUtf8($codepoint)
{
    if ($codepoint < 0x7F) // U+0000-U+007F - 1 byte
        return chr($codepoint);
    if ($codepoint < 0x7FF) // U+0080-U+07FF - 2 bytes
        return chr(0xC0 | ($codepoint >> 6)).chr(0x80 | ($codepoint & 0x3F);
    if ($codepoint < 0xFFFF) // U+0800-U+FFFF - 3 bytes
        return chr(0xE0 | ($codepoint >> 12)).chr(0x80 | (($codepoint >> 6) & 0x3F).chr(0x80 | ($codepoint & 0x3F);
    else // U+010000-U+10FFFF - 4 bytes
        return chr(0xF0 | ($codepoint >> 18)).chr(0x80 | ($codepoint >> 12) & 0x3F).chr(0x80 | (($codepoint >> 6) & 0x3F).chr(0x80 | ($codepoint & 0x3F);
}

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读