将Perl-Scripts和MySql数据库设置为UTF8:德语元音仅适用于注释中的西里尔字符

时间:2014-07-06 14:13:10

标签: html mysql perl utf-8 cyrillic

我将MySQL数据库和perl脚本转换为UTF-8。最后它起作用了,但它在某种程度上是一个疯狂的解决方案。这就是我所做的:

MYSQL数据库:完全设置为UTF8

PERL-SCRIPTS:源代码转换为UTF8编码。 “使用utf8;”在顶部。

HTML报头:

  print "Content-type: text/html\n\n";

  <META CHARSET='UTF-8'>

数据库连接:

  $dbh->{'mysql_enable_utf8'} = 1;

  "set names 'utf8';"

现在,一切都适用于西里尔(俄语)字符:数据库中的输入,输出和处理,很好。但我遇到的问题是德国的“Umlaute”:äöü。它们未在浏览器中正确显示。它们仅在我在HTML元素旁边的注释中放置一个西里尔字符时才起作用,该注释不显示该字符,例如像这样的东西:

  <!-- Э -->

这是一个尴尬的解决方案,我知道必须有一个没有它的解决方案。有谁知道可能缺少什么。每个答案都要提前感谢!

UPDATE:

谢谢你的回复。我想,即使是最简单的HTML文件我也有问题。我使用这个源代码:

#!/usr/bin/perl
use utf8;
print "Content-Type: text/html; charset=utf-8\n\n";
print <<END;
    <HTML>
        <HEAD>
            <META CHARSET='UTF-8'>
        </HEAD>
        <BODY>
            <H1>The Country Österreich</H1>
        </BODY>
    </HTML>
END

结果可见于: http://5mls.com/test_bad.cgi
如您所见,“Ö”未显示 现在有效的代码:

#!/usr/bin/perl
use utf8;
print "Content-Type: text/html; charset=utf-8\n\n";
print <<END;
    <HTML>
        <HEAD>
            <META CHARSET='UTF-8'>
        </HEAD>
        <BODY>
            <H1>The Country Österreich<!-- Э --></H1>
        </BODY>
    </HTML>
END

结果可见于: http://5mls.com/test_good.cgi
这次“Ö”正确显示,因为评论中的俄语字符“Э”。有人知道,“Ö”如何在没有俄文字符的情况下展示吗?

1 个答案:

答案 0 :(得分:0)

使用utf8处理perl脚本和MySQL时,我也遇到了问题。

使用浏览器中的Web开发人员工具检查cgi脚本发送到浏览器的内容。 然后使用编码模块尝试编码perl发送到您的浏览器的内容:

use Encode qw(encode);

并对输出进行编码:

my $austria = "<HTML>
    <HEAD>
        <META CHARSET='UTF-8'>
    </HEAD>
    <BODY>
        <H1>The Country Österreich</H1>
    </BODY>
</HTML>";
print encode('utf-8', $austria);

此外,您的test_bad.cgi脚本适用于我,并在浏览器中输出正确的输出。