2009-02-22 7 views
21

HTMLエンティティをどのようにデコードできますか?

ここに簡単なPerlの質問があります:

ü'のようなHTML特殊文字を普通のASCIIテキストに変換するにはどうしたらいいですか?

これは、すべてのHTML文字に対して記述できますが、このような関数はおそらくすでに存在していますか?

私は完全なHTML->テキストコンバータは必要ないことに注意してください。私はすでにHTML::ParserでHTMLを解析しています。私はちょうど私が得ている特別な文字でテキストを変換する必要があります。

答えて

47

HTML::Entitiesを見てみましょう:

use HTML::Entities; 

my $html = "Snoopy & Charlie Brown"; 

print decode_entities($html), "\n"; 

あなたは出力を推測することができます。

+1

CLIが好きな人のために、 'perl -MHTML :: Entities -le 'は、decode_entities("¿ "'") ' –

3

あらかじめ定義されたHTMLエンティティ - &">などがあります。ハードコードすることができます。

しかし、numbericエンティティの大きい場合 - {は - これらの値は、Unicodeているように、はるかに困難になるだろう、とASCIIへの変換は、困難から不可能の範囲になるだろう。

+0

を正しく表示します。 Unicodeから「平易なASCII」への逆翻訳などはありません。 Joelはテキストエンコーディングに関して本当に良い記事を書いた、dehmannはそれを読むべきです... – AmbroseChapel

+1

http://www.joelonsoftware.com/articles/Unicode.html 'プレーンテキスト= ascii =文字は8ビットです間違っているだけでなく、それは間違っています。あなたがまだこのようにプログラミングしているなら、病原菌を信じていない医師よりもずっと優れています。 – AmbroseChapel

+1

Perl:...難しいことを可能にする – daxim

6

16進数指定の文字もあります。彼らはこのように見えます:é (é)。

エンティティを実際の文字に変換するには、HTML :: Entitiesのdecode_entitiesを使用します。これをASCIIに変換するには、より多くの作業が必要です。私はiconv(perl interface:Text :: Iconv) をtransliterateオプションと共に使用しています。しかし、限定されたエンティティセットで を扱っている場合、または実際にASCII同等物に換算する必要がない場合は、 decode_entitiesの生成を制限するか、カスタム 変換マップを使用する方がよい場合があります。 HTML :: Entitiesドキュメントを参照してください。

20

上記の答えは、エンティティをPerl文字列にデコードする方法を説明していますが、それらをASCIIに変更する方法も尋ねました。

:これは何をしたい本当に、あなたはあなたが戻ってASCII文字のほぼ同じコレクションにすべてのそれらの奇妙な文字は振るためにCPANから Text::Unidecodeモジュールで見ることができ、すべてのUnicode文字を望んでいないと仮定すると

use Text::Unidecode qw(unidecode); 
use HTML::Entities qw(decode_entities); 

my $source = '北亰'; 
print unidecode(decode_entities($source)); 

# That prints: Bei Jing 
関連する問題