Perl找到并替换严重的角色

时间:2012-07-30 08:27:31

标签: perl character replace

我需要使用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;
}

对于char和&amp; &LT; ecc它有效,但严重的字母不起作用。

2 个答案:

答案 0 :(得分: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:numeric character references

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>

答案 1 :(得分:0)

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

use utf8;

在脚本的开头。

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

use utf8;
use HTML::Entities qw(encode_entities);
encode_entities 'è';    # returns '&egrave;'