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>

base.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

いくつかのコード:

title.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>

base.mc

<head>    </head>  

このリンクは役に立ちました。

于 2012-10-18T18:10:42.197 に答える
1

文字をhtmlエンティティに置き換えてエスケープすることは、ほとんどの場合正しいことではありません。

基盤となるサーバー(触媒?)がUnicodeに対応していない可能性があります。CPANを検索すると、Catalyst :: Plugin :: Unicode::Encodingが起動します。これが役立つ場合があります。

于 2012-10-11T17:53:59.127 に答える