我遇到了一个问题,在过去的10个小时里,我在网上寻找答案后无法解决这个问题。
我有一些这种格式的数据
??E?�?0?�?<?20120529184453+0200?20120529184453+0200?�?�?G0E?5?=20111213T103134000-136.225.6.103-30365316-1448169323, ver: 12?�?W??tP?2?�? ??|????? ??:o?????tP?�??B@?????B@????�?�?)0?�??? 49471010550?�??	???tP???3??<?�?�?�?�??�?�?�?�?�??�?�?�?�?�
我有一个PHP代码,不是由我编写的,只是在其上运行html_entity_decode并返回正确的结果。
当我尝试运行Perl的decode_entities时,我得到了完全不同的结果。经过一些调试后,在我看来,PHP正在“正确地”将似乎无效的实体(例如�
或
- 替换为它们的ascii对应物,即上述2种情况的NULL和退格。
�
)的每个字符。
我已经尝试了我能想到的一切,包括在运行decode_entities
后在perl中运行以下替换 $var =~ s/&#(\d+);/chr($1)/g
然而,这根本不起作用。
这让我很生气,我想在perl中完成这个而不是phpI真的希望我不必在perl中编写1000个模式匹配行来覆盖所有可能的实体和数字。
任何人都知道如何解决这个问题而不必将PHP整个html_entity_decode函数解析为perl或编写无休止的模式匹配行?
答案 0 :(得分:2)
你快到了。而不是
$var =~ s/&#(\d+);/chr($1)/g
说
$var =~ s/&#(\d+);/chr($1)/ge
/e
修饰符指示Perl'e'评估替换模式。