2016-10-11 11 views
1

Perlでは、数値のHTMLエンティティを含む文字列をHTML::Entitiesでデコードしようとしています。一部のエンティティは機能しますが、「新しい」エンティティは機能しません。例:一部のHTMLエンティティをデコードすると出力が文字化けするのはなぜですか?

decode_entities('®'); # returns ® as expected 
decode_entities('Ω'); # returns Ω instead of Ω 
decode_entities('★'); # returns ★ instead of ★ 

「新しい」HTMLエンティティをPerlでデコードする方法はありますか? PHPでは、html_entity_decode関数はこれらの実体すべてを問題なくデコードするようです。

答えて

4

デコードが正常に動作します。それはあなたがそれらを間違って出力している方法です。たとえば、文字列を最初にエンコードせずに端末に送信したとします。これは、以下のプログラムでopenプラグマによって実現されます。

$ perl -e' 
    use open ":std", ":encoding(UTF-8)"; 
    use HTML::Entities qw(decode_entities); 
    CORE::say decode_entities($_) 
     for "®", "Ω", "★"; 
' 
® 
Ω 
★ 
+0

ありがとうございます。 –

1

は、あなたの端末がUTF-8エンコーディングを扱うことができることを確認してください。マルチバイト文字に問題があるようです。ワイド文字警告を受け取る場合に備えて、STDOUTのUTF-8を設定することもできます。

use strict; 
use warnings; 
use HTML::Entities; 

binmode STDOUT, ':encoding(UTF-8)'; 

print decode_entities('®'); # returns ® 
print decode_entities('Ω'); # returns Ω 
print decode_entities('★'); # returns ★ 

これは私に正しい/期待される結果を与えます。

関連する問題