在 Perl 中编码特殊字符

Posted

技术标签:

【中文标题】在 Perl 中编码特殊字符【英文标题】:Encoding Special Characters in Perl 【发布时间】:2021-09-26 10:03:35 【问题描述】:

我有这个字符串例如:

This is an example text ã&"><£

当我在字符串上运行这个 Perl 代码时:

my($string)= @_;
$string =~ s/>//g;
$string =~ s/<//g;
$string =~ s/&/and/g;
$string  =~ s/\"//g;
$string  =~ s/-//;
$string  =~ s/ó//;
$string =~ s/;//g;
$string =~ s/&/&amp;/g;

$string = encode_entities($string, '<>&"');
$string = encode_utf8($string);

return $string;      

我收到了这个结果:

This is an example text ã£ã£

而不是预期的:

This is an example text ã&amp;&quot;&gt;&lt;£

我该如何解决?

【问题讨论】:

请出示您的完整剧本。请参阅minimal reproducible example 了解更多信息 嗨,我用完整的脚本编辑了上面的问题。那些行是: $string =~ s/>//g;删除特殊字符? 是的,您显示的代码删除了一些字符并替换了其他一些字符。我不确定你的意思? 对不起,我是 perl 新手,这不是我写的代码。只是为了理解,这行代码: $string =~ s/&/&/g;从我的字符串中删除 &? 尝试运行echo "&amp;1&amp;2" | perl -pE 's/&amp;/&amp;amp;/g' 你会看到它用“&amp1;&amp2;”替换了字符串“&1&2” 【参考方案1】:

你能试试下面的脚本吗:

use feature qw(say);
use strict;
use warnings;
use utf8;
use open qw(:std :encoding(utf-8));
use html::Entities;

my $string = 'This is an example text ã&"><£';
$string = encode_entities($string, '<>&"');
say $string;

输出

This is an example text ã&amp;&quot;&gt;&lt;£

【讨论】:

以上是关于在 Perl 中编码特殊字符的主要内容,如果未能解决你的问题,请参考以下文章

使用 perl 脚本从字符串中删除特殊字符

如何使用 perl 从变量中删除特殊字符 [关闭]

如何删除从perl读取sql文件时附加的特殊字符

Perl 变量:标量变量

URL中的特殊字符

URL中的特殊字符