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

时间:2010-11-27 07:05:47

标签: php

PHP是否有一个函数可以在字符串中搜索十六进制代码并将它们转换为它们的char等价物?

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

“Hello World \ x19s”

我想将其转换为

“Hello World's”

提前致谢。

4 个答案:

答案 0 :(得分:6)

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

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

答案 1 :(得分:4)

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

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

通过添加单引号,像'='(\ x3d)这样的字符也可以很好地转换。

答案 2 :(得分:2)

/ e将在当前的php中生成错误,建议使用preg_replace_callback。试试这个:

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

答案 3 :(得分:0)

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

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

这会将'变为',将&变为&