2

"&'<>Perl 中将特殊符号转换为 Perl中实体的最简单方法是什么&quot; &amp; &apos; &lt; &gt;?像这样写函数很容易,但是我觉得这个问题已经解决了很多次了,没必要自己写函数了。

sub add_entities {
    my ($text) = @_;

    $text =~ s/&/&amp;/g;
    $text =~ s/"/&quot;/g;
    $text =~ s/'/&apos;/g;
    $text =~ s/</&lt;/g;
    $text =~ s/>/&gt;/g;

    return $text;
}

sub remove_entities {
    my ($text) = @_;

    $text =~ s/&quot;/"/g;
    $text =~ s/&amp;/&/g;
    $text =~ s/&apos;/'/g;
    $text =~ s/&lt;/</g;
    $text =~ s/&gt;/>/g;

    return $text;
}
4

1 回答 1

0

你永远不需要remove_entities. 您的解析器不应返回任何实体。似乎你有一个可怕的解析器。我推荐 XML::LibXML。

add_entitiesXML也是如此。XML 编写库将为您处理所有这些。您也可以为此使用 XML::LibXML,但 XML::Writer 用于此任务要简单得多。

请注意,您的两个例程都被严重破坏了。add_entities不考虑字符集。remove_entities不处理基本 XML 规范之外的数字和实体。

于 2013-10-11T20:24:24.920 回答