web-dev-qa-db-ja.com

HTMLエンティティをデコードするにはどうすればよいですか?

Perlの簡単な質問は次のとおりです。

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

私はこのようなものから始めました:

s/\&#(\d+);/chr($1)/eg;

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

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

22
Frank

HTML :: Entities :を見てください。

use HTML::Entities;

my $html = "Snoopy & Charlie Brown";

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

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

50
Telemachus

上記の回答は、エンティティをPerl文字列にデコードする方法を示していますが、それらを[〜#〜] ascii [〜#〜]に変更する方法も尋ねました。

これが本当に必要なものであり、すべてのユニコード文字が必要ではないと仮定すると、CPANから Text :: Unicodecode モジュールを見て、これらすべての奇数文字をほぼ同様のコレクションに戻すことができます。 ASCII文字:

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

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

# That prints: Bei Jing 
21
Mark Fowler

事前定義されたHTMLエンティティがいくつかあります-&">など-ハードコーディングできます。

ただし、数値エンティティの大きなケース-{-これらの値は nicode であり、ASCIIへの変換はの範囲になるため、はるかに困難になります難しいから不可能

3
Bevan