Perl处理特殊字符编码输出与预期不符该如何解决
问题解决方案
你的代码存在逻辑颠倒和多余替换的问题,直接删除了所有你需要编码的特殊字符,所以无法得到预期输出,按以下步骤修正即可:
错误原因
- 你在编码前加的7行正则替换,会直接删除/替换掉所有需要保留的特殊字符:
s/>//g、s/<//g、s/\"//g会直接删掉<、>、"字符s/&/and/g会把&替换为普通文本and,后续再也无法识别编码- 其余删除
-、ó、;的操作也会破坏原始字符串内容
- 实体编码操作需要作用在原始的特殊字符上,你先删后编码的逻辑完全颠倒,自然无法得到预期结果。
修正后代码
# 注意需要提前引入依赖模块 use HTML::Entities; use Encode; sub process_string { my($string) = @_; # 删掉所有多余的正则替换,直接对原始字符串做实体编码 $string = encode_entities($string, '<>&"'); $string = encode_utf8($string); return $string; }
效果验证
将你的原始输入字符串传入上述函数,即可直接得到你预期的输出:This is an example text ã&amp;&quot;&gt;&lt;£,完全符合需求。
内容的提问来源于stack exchange,提问作者user16076953
相关产品推荐
相关产品推荐

