HTMLエンティティをデコードするにはどうすればよいですか?
-
05-09-2019 - |
質問
これが簡単なPerlの質問です:
HTMLの特殊文字をように変換するにはどうすればよいですか ü
また '
通常のASCIIテキストに?
私はこのようなものから始めました:
s/\&#(\d+);/chr($1)/eg;
すべてのHTML文字に書くことができますが、このような機能はおそらくすでに存在しますか?
完全なHTML->テキストコンバーターは必要ないことに注意してください。私はすでにHTMLを解析します HTML::Parser
. 。テキストを私が得ている特別な文字で変換する必要があります。
解決
を見てみましょう HTML ::エンティティ:
use HTML::Entities;
my $html = "Snoopy & Charlie Brown";
print decode_entities($html), "\n";
出力を推測できます。
他のヒント
上記の回答は、エンティティをPerl文字列にデコードする方法を教えてくれますが、それらを変更する方法も尋ねました ascii.
これが本当にあなたが望むものであり、あなたが見ることができるすべてのユニコード文字を望んでいないと仮定すると テキスト:: unidecode CPANからのモジュールは、これらすべての奇妙な文字をASCII文字のほぼ類似したコレクションに戻します。
use Text::Unidecode qw(unidecode);
use HTML::Entities qw(decode_entities);
my $source = '北亰';
print unidecode(decode_entities($source));
# That prints: Bei Jing
HEX指定の文字もあることに注意してください。彼らは次のように見えます:é(é)。
HTML ::エンティティのdecode_entitiesを使用して、エンティティを実際の文字に変換します。それをASCIIに変換するには、より多くの作業が必要です。 ICONV(Perlインターフェイス:Text :: Iconv)を使用して、過去にいくつかの成功を収めた音訳オプションをオンにしました。ただし、限られたエンティティのセットを扱っている場合、または実際にASCIIに相当するものに縮小する必要がない場合は、DeCode_Entitiesが生成するものを制限するか、カスタム変換マップを提供する方が良いかもしれません。 HTML :: Entities Docを参照してください。
事前に定義されたHTMLエンティティがいくつかあります - &
"
>
など - ハードコードができます。
ただし、数字のエンティティの大規模なケース - {
- それらの値はずっと難しくなるでしょう Unicode, 、そしてASCIIへの変換はからです 難しい に 無理だよ.