php过滤unicode字符串,PHP构造一个Unicode字符串?

搜索热词

给定想要从CLI

PHP脚本输出的字符的Unicode十进制或十六进制数,PHP如何生成它? chr()函数似乎没有生成正确的输出.这是我的测试脚本,使用Section Break字符U 00A7(十六进制中的A7,十进制中的167,应该用UTF-8中的C2 A7表示)作为测试:

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

}

总结

如果觉得编程之家网站内容还不错,欢迎将编程之家网站推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值