-1

我需要用 perl 查找并替换字符串中的所有严重字符。我尝试使用以下代码执行此操作

$str=~ s/è/è /g;

但是è没有找到。我需要转换严重字符,因为我必须在 XML 文件中插入有人可以帮助我吗?

正如所问,这是代码

sub ConvertiCaratteri()
{
    my ($variabile)=shift;
    #&lt; <
    #&gt; >
    #&amp; &
    #&apos; '
    #&quot; "
    $form{$variabile}=~ s/&/&amp; /g;
    $form{$variabile}=~ s/</&lt; /g;
    $form{$variabile}=~ s/>/&gt; /g;
    $form{$variabile}=~ s/'/&apos; /g;
    $form{$variabile}=~ s/"/&quot; /g;
    $form{$variabile}=~ s/à/&agrave; /g;
    $form{$variabile}=~ s/è/&egrave; /g;
    $form{$variabile}=~ s/é/&amp;&eacute; /g;
    $form{$variabile}=~ s/ì/&amp;&igrave; /g;
    $form{$variabile}=~ s/ò/&amp;&ograve; /g;
    $form{$variabile}=~ s/ù/&amp;&ugrave; /g;
}

对于像 & < ecc 这样的字符,它可以工作,但对于严重的字母则不起作用。

4

2 回答 2

2

修复产生无效 XML 的代码。将字符传递给 XML 库并指定合适的字符编码。XML 默认编码 UTF-8 就可以了。

解决方案1:纯字符

use utf8;
use XML::LibXML qw();
my $dom = XML::LibXML->createDocument('1.0', 'UTF-8');
my $root = $dom->createElement('root');
$root->appendText('è');
$dom->setDocumentElement($root);
$dom->toFile('foo.xml');

<?xml version="1.0" encoding="UTF-8"?>
<root>è</root>


解决方案 2:数字字符引用

use utf8;
use XML::LibXML qw();
my $dom = XML::LibXML->createDocument('1.0', 'ANSI_X3.4-1968');
my $root = $dom->createElement('root');
$root->appendText('è');
$dom->setDocumentElement($root);
$dom->toFile('foo.xml');

<?xml version="1.0" encoding="ANSI_X3.4-1968"?>
<root>&#232;</root>
于 2012-07-30T08:51:09.727 回答
0

您的 Perl 脚本和您尝试处理的文件之间可能存在编码不匹配。如果您的 HTML 是 UTF-8 编码的,您可以尝试输入:

use utf8;

在脚本的开头。

更好的是,使用 HTML::Entities:

use utf8;
use HTML::Entities qw(encode_entities);
encode_entities 'è';    # returns '&egrave;'
于 2012-07-30T08:42:09.120 回答