Php 将十六进制代码转换为字符

Php 将十六进制代码转换为字符,php,Php,PHP是否有一个函数可以搜索字符串中的十六进制代码并将其转换为对应的字符 例如,我有一个包含以下内容的字符串 “你好,世界\x19s” 我想把它转换成 “你好,世界杯” 提前感谢。此代码将“Hello World\x27s”转换为“Hello World的”。它会将“\x19”转换为“媒体结尾”字符,因为这是0x19在ASCII中表示的内容 $str = preg_replace('/\\\\x([0-9a-f]{2})/e', 'chr(hexdec($1))', $str); 如果我错了,

PHP是否有一个函数可以搜索字符串中的十六进制代码并将其转换为对应的字符

例如,我有一个包含以下内容的字符串

“你好,世界\x19s”

我想把它转换成

“你好,世界杯”

提前感谢。

此代码将“Hello World\x27s”转换为“Hello World的”。它会将“\x19”转换为“媒体结尾”字符,因为这是0x19在ASCII中表示的内容

$str = preg_replace('/\\\\x([0-9a-f]{2})/e', 'chr(hexdec($1))', $str);

如果我错了,请纠正我,但我认为您应该这样更改回调:

$str = preg_replace('/\\\\x([0-9a-f]{2})/e', 'chr(hexdec(\'$1\'))', $str);

通过添加单引号,像“=”(\x3d)这样的字符也会被很好地转换。

e将在当前php中生成一个错误,建议使用preg\u replace\u回调。试试这个:

preg_replace_callback('/\\\\x([0-9a-f]{2})/', function ($m) { return chr(hexdec($m[1])); },  $str );

/e修饰符导致PHP错误。在新的PHP更新中,它已被弃用。将十六进制代码转换为字符的正确方法是:

$str = html_entity_decode($str, ENT_QUOTES | ENT_XML1, 'UTF-8');

这将打开
&apos编码为
&&etc

E\u警告:类型2--preg\u replace():不再支持/E修饰符,请改用preg\u replace\u回调--E\u警告:类型2--preg\u replace():不再支持/E修饰符,改用preg\u replace\u回调--PHP中的/E修饰符现在确实会导致错误。但是您的代码仍然将十六进制代码保留在字符串中,并且没有转换为字符。