2

我有 comЯade这个词,但由于俄语 Я,我无法在 HTML 中打印它...我试过了:

$HTML::Entities::char2entity{'Я'} = 'Я';  
$HTML::Entities::char2entity{'1071'} = 'Я';  
$HTML::Entities::char2entity{'ï'} = 'Я';  
$str = HTML::Entities::encode_entities( $str, q{Яï1071} );   

之后我尝试了:

$str =~ s/1071/Я/g;
$str =~ s/Я/Я/g;
$str =~ s/ï/Я/g;    

但在这两种情况下,我都会收到此错误:

/usr/local/share/perl/5.10.1/Starman/Server.pm 第 470 行的 syswrite 中的宽字符。

为什么?

一些代码:

标题.mi

<%init>
binmode STDOUT, ':encoding(UTF-8)';
($str =~ s/&/%26/g;); #this is working
$str =~ s/1071/&#1071;/g;
$str =~ s/Я/&#1071;/g;
$str =~ s/ï/&#1071;/g;
</%init>
<div class="bd-headline left">
<h1 style="margin-top:0; padding-top:0;"> <% $str %> </h1>
</div>

基础.mc

<head>
     <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
</head>
4

3 回答 3

2

问题1:

如果您的源代码是使用 UTF-8 编码的,那么使用use utf8;.

如果您的源代码未使用 UTF-8 编码,则其中不可能有“Я”。


问题2:

文件句柄只能传输字节,但您不能将 Unicode 字符编码为字节。这是通过使用 UTF-8 等字符编码来完成的。您的文档指定使用什么编码?使用它对您的输出进行编码,如下所示:

binmode STDOUT, ':encoding(UTF-8)';
于 2012-10-11T16:58:36.347 回答
1

通过用 html 实体替换字符来转义字符几乎从来都不是正确的做法。

底层服务器(催化剂?)可能不支持 unicode。搜索 CPAN 会发现 Catalyst::Plugin::Unicode::Encoding 可能会有所帮助。

于 2012-10-11T17:53:59.127 回答
1

一些代码:

标题.mi

<%init>  
        use Encode;
        my $hl = encode_utf8($str);  
        my $find = "&#1071;";   
        my $replace = "Я";  
        $hl =~ s/$find/$replace/g; 
        my $hs = HTML::Strip->new();
        my $no_html_hl = $hs->parse($hl); 
</%init>
<div class="bd-headline left">
            <h1 style="margin-top:0; padding-top:0;"> <% $no_html_hl %> </h1>
</div>

基础.mc

<head>    </head>  

这个链接很有帮助。

于 2012-10-18T18:10:42.197 回答