質問

これが簡単な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への変換はからです 難しい無理だよ.

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top