带有额外字符的特殊字符显示在它们之前

时间:2015-11-20 03:05:11

标签: html perl unicode

我一直在试图弄清楚如何处理用户在表单中输入的一些特殊常见字符。我的意思是版权符号,注册符号,分数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”字符的来源。

在你向我投票之前,请知道我已经花了几个小时来研究这个并且正在阅读试图解决这个问题。我感谢任何可以帮助我的人。

1 个答案:

答案 0 :(得分:0)

将http标题更改为-charset=>'utf-8',现在效果非常好。