2015-11-20 43 views
0

我一直在破坏我的脑袋,试图弄清楚如何处理一些特殊的共性是通过表格的用户输入。我的意思的例子是版权标志,注册标志,分数1/2,1/4的分数,等等。因此,这里发生了什么:特殊字符多余的字符显示出来之前

用户输入这些字符,并将它们保存到一个普通的文本文件。没问题。他们被保存在他们的真实和纯粹的形式。现在,当我们用Perl CGI文件抓取它们并将它们显示在浏览器中时,我得到了所有这些“A”和其他A字符以及上面的标记。我在字符串上运行一个子例程,试图将这些从Unicode匹配转换为HTML实体,但它似乎没有工作。

Perl代码:

#string with special characters 
$special_chars=encodebc($special_chars); 

sub encodebc{ 
$answer=$_[0]; 
$answer =~ s/:://gi; 
$answer =~ s/\x{0022}/"/g; 
$answer =~ s/\x{0027}/'/g; 
$answer =~ s/\x{0026}/&/g; 
$answer =~ s/\x{003C}/</g; 
$answer =~ s/\x{003E}/>/g; 
$answer =~ s/\x{0060}/`/g; 
$answer =~ s/\x{007B}/{/g; 
$answer =~ s/\x{007D}/}/g; 
$answer =~ s/\x{00A9}/©/g; 
$answer =~ s/\x{00AE}/®/g; 
$answer =~ s/\x{00AB}/«/g; 
$answer =~ s/\x{00BB}/»/g; 
$answer =~ s/\x{00A2}/¢/g; 
$answer =~ s/\x{00B0}/°/g; 
$answer =~ s/\x{00B2}/²/g; 
$answer =~ s/\x{00B3}/³/g; 
$answer =~ s/\x{00B5}/µ/g; 
$answer =~ s/\x{00BC}/¼/g; 
$answer =~ s/\x{00BD}/½/g; 
$answer =~ s/\x{00BE}/¾/g; 
$answer =~ s/\x{00E1}/á/g; 
$answer =~ s/\x{00E9}/é/g; 
$answer =~ s/\x{00F1}/ñ/g; 
$answer =~ s/\x{00F5}/õ/g; 
$answer =~ s/\x{00F8}/ø/g; 
return $answer; 
} 

在上面的代码,我匹配在Unicode双字节字符...所以我不理解,其中“A”字的来源。

之前,你downvote我,请知道我花了几个小时后小时的工作就这个问题和阅读试图弄清楚这一点。我很感激能够帮助我的人。

+1

*非常*很长的关于在Perl中处理Unicode的答案在这里:http://stackoverflow.com/questions/6162484/why-does-modern-perl-avoid-utf-8-by-default – roeland

+1

但总之:“他们的真实和纯粹的形式“并不意味着什么。它必须使用像UTF-8或UTF-16这样的编码进行存储。如果你的文本看起来像''¢¢'''那么你可能会发送UTF-8,但是在HTTP标头中声明它为ISO-8859-1。 – roeland

+0

它的外观。在Perl中关于Unicode的文章链接的赞誉!我的头正在游泳! – Bob

回答

0

更改HTTP头-charset=>'utf-8',现在它完美的作品。