如何在解码HTML实体时跳过其他语言

问题描述:

此代码块包含不同的语言和HTML实体。如何在解码HTML实体时跳过其他语言

这是功能。请为此提出解决方案。就其本身而言,它也改变了所有其他语言。

#! /usr/bin/perl -w 

use HTML::Entities; 
use Encode; 

my $a = "® , ª , Ñ , ‚ , î , ô , æ , ê , ß , š , ù"; 
my $b = "Pessimo il servizio della climatizzazione. Da migliorare la ristorazione."; 
my $c = "先秦兩漢 ®®® 儒家 孔子家語 子貢問(疑為「子夏問 曲禮子貢問第四十二,子夏問第四十三,疑誤植為「子貢問"; 
my $d = "漢字仮名交じり文"; 
my $e = "Очень хорошо все понравилась"; 

decode_entities($a); 
decode_entities($b); 
decode_entities($c); 
decode_entities($d); 
decode_entities($e); 

open(OUT,">test.xml"); 
print OUT '<?xml version="1.0" encoding="UTF-8" ?>'."\n"; 
print OUT "<Tag1>$a</Tag1>\n"; 
print OUT "<Tag2>$b</Tag2>\n"; 
print OUT "<Tag3>$c</Tag3>\n"; 
print OUT "<Tag4>$d</Tag4>\n"; 
print OUT "<Tag5>$e</Tag5>\n"; 
close(OUT); 

我想改变 HTML名称/ HTML数为HTML符号。所有其他数据必须保持原样。

+0

'decode_entities()'不会做任何这些字符。你有什么具体问题?我认为你把它归咎于错误的组件。 – AKHolland 2014-10-30 13:40:00

+2

您的源代码不可能包含您所说的内容。如果没有'use utf8;',源代码应该是US-ASCII,'先'不是ASCII字符。 – ikegami 2014-10-30 14:24:41

你不说什么问题,但它看起来好像跟HTML::Entities没什么关系。首先,你已经编写了一个UTF-8编码的程序,而不告诉Perl有关编码;其次,您正在将UTF-8编写为未设置的文件句柄。

另外也必须始终use strictuse warnings Perl程序的顶部;在shebang线上的-w开关将不会做。而且你应该使用的open三个参数的形式,并且或者检查每一个或use autodie的状态,这将做到这一点你,如果你有10版或更高版本的Perl 5

你也应该不不断sort块之外使用变量$a$b

所以,你的程序应该是这样的

#! /usr/bin/perl 

use utf8; 
use strict; 
use warnings; 

use HTML::Entities; 

my @strings = (
    '&reg; , &ordf; , &Ntilde; , &sbquo; , &icirc; , &ocirc; , &aelig; , &ecirc; , &szlig; , &scaron; , &ugrave;', 
    'Pessimo il servizio della climatizzazione. Da migliorare la ristorazione.', 
    '先秦兩漢 &reg;&reg;&reg; 儒家 孔子家語 子貢問(疑為「子夏問 曲禮子貢問第四十二,子夏問第四十三,疑誤植為「子貢問', 
    '漢字仮名交じり文', 
    'Очень хорошо все понравилась', 
); 

decode_entities($_) for @strings; 

open my $out_fh, '>:encoding(UTF-8)', 'test.xml' 
     or die qq{Unable to open "test.xml" for output: $!}; 
print $out_fh qq{<?xml version="1.0" encoding="UTF-8" ?>\n}; 
print $out_fh "<Tag1>$_</Tag1>\n" for @strings; 
close $out_fh; 

在我的系统,这使以下文本test.xml,这正是我所期望的。

<?xml version="1.0" encoding="UTF-8" ?> 
<Tag1>® , ª , Ñ , ‚ , î , ô , æ , ê , ß , š , ù</Tag1> 
<Tag1>Pessimo il servizio della climatizzazione. Da migliorare la ristorazione.</Tag1> 
<Tag1>先秦兩漢 ®®® 儒家 孔子家語 子貢問(疑為「子夏問 曲禮子貢問第四十二,子夏問第四十三,疑誤植為「子貢問</Tag1> 
<Tag1>漢字仮名交じり文</Tag1> 
<Tag1>Очень хорошо все понравилась</Tag1> 

评论

对于那些有兴趣,谷歌翻译都提供空调以下

  • $strings[1]意大利服务不好。改善食物。

  • $strings[2]中国(汉族)秦和孔子的汉®®®论语,子贡问(疑似“子夏问音乐人子贡问第四十二,第四十三届子夏问,疑误植为”子贡问

  • $strings[3]中国(汉族)字符樊文名哨吉り

  • $strings[4]俄罗斯很好很喜欢所有

+0

Thnaks为您提供指导。我也得到相同的输出,但只在记事本++。当我用浏览器尝试这个时,它会失败,vi编辑器(Putty)也不会显示正确的输出,并且在xmllint命令时失败 – 2014-10-31 04:59:10