在PHP中将UTF-8十六进制代码转换为字符

5
我有一个十六进制码为c2ae,如何将其转换为UTF-8字符:®。我需要一个通用且简单的解决方案来转换任何十六进制码。 更新:这适用于任何UTF-8十六进制码,例如d0a6。
3个回答

8
function hexStringToString($hex) {
    return pack('H*', $hex);
}

非常奇怪,你能解释一下吗? - johnlemon
3
pack()和unpack()是PHP中用于在二进制字符串中推送数据的函数。“H*”表示“任意数量的十六进制八位字节,高半字节先行”。请参阅http://php.net/manual/en/function.pack.php。 - chaos
如果他的十六进制代码改为%C2%AE,H*的值应该更改为什么? - Grant_Bailey
@chaos,你能告诉我如何反向完成这个操作吗?我的意思是输入“®”并得到“C2AE”。使用pack函数。(我已经阅读了其他问题和答案,我想知道如何使用神奇的pack函数来实现这一点)谢谢。 - TechLife
@TechLife unpack('H*', '®'),结果为array('c2ae') - chaos

1
我相信你在4年前提出这个问题时已经找到了解决方案,但当我在Google上寻找答案时,我讨厌找到未解答的问题。
您可以使用以下方法在PHP中创建包含十六进制字符的字符串:
$string = "\xc2\xae";
$string2 = "\xd0\xa6";
echo $string;
echo $string2;

这将输出®Ц

PHP的语言参考文献[在标题"Double Quoted"下面可找到]。

您还可以使用八进制字符串,使用\22语法; PHP7中添加了Unicode代码点支持,使用\u语法。这个需要在代码周围加上{},如:\u{1000}

愉快编码!


你的回答看起来很有希望,但我仍然无法弄清如何在☑后面添加http://www.fileformat.info/info/unicode/char/fe0e/index.htm,以便它强制显示为纯文本而不是表情符号。你知道吗?谢谢。 - Ryan
1
不确定您是否仍在寻找,但是在此页面上的选票框中的勾选应该是Unicode 2611,因此PHP应该能够使用echo "\u{2611}";进行输出。希望这可以帮到您! - Halcyon
谢谢。我最终将它移动到了 SCSS 并像这样使用:content: "☑\FE0E",需要使用 EmojiSymbols 字体(https://dev59.com/ZFwY5IYBdhLWcg3wLFOw#rtnonYgBc1ULPQZFk6rH)。 - Ryan

0

首先,您需要安装PHP扩展“mbstring”。我在Windows上安装了XAMPP,并且默认情况下安装了所有内容。

接下来,我们使用以mb_开头的函数,在我们的例子中是mb_chr()。

示例:

<?php
echo mb_chr(0x1F621);
?>

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接