سؤال

إليك سؤال سريع في بيرل:

كيف يمكنني تحويل أحرف HTML الخاصة مثل ü أو ' إلى نص ASCII العادي؟

لقد بدأت بشيء مثل هذا:

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

ويمكن أن يكتبها لجميع أحرف HTML، ولكن بعض الوظائف مثل هذا ربما موجود بالفعل؟

لاحظ أنني لا أحتاج إلى محول نص HTML-> كامل. أنا بالفعل تحليل HTML مع HTML::Parser. وبعد أنا فقط بحاجة إلى تحويل النص باستخدام الأحرف الخاصة التي أحصل عليها.

هل كانت مفيدة؟

المحلول

إلقاء نظرة على أتش تي أم أل :: كيانات:

use HTML::Entities;

my $html = "Snoopy & Charlie Brown";

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

يمكنك تخمين الإخراج.

نصائح أخرى

الإجابات أعلاه تخبرك بكيفية فك تشفير الكيانات في سلاسل بيرل، لكنك طلبت أيضا كيفية تغيير تلك الموجودة ASCII..

على افتراض أن هذا هو حقا ما تريد ولا تريد كل أحرف يونيكود التي يمكنك إلقاء نظرة عليها النص :: Unidecode. الوحدة النمطية من CPAN إلى ZAP جميع الأحرف الفردية مرة أخرى في مجموعة مماثلة تقريبا من أحرف ASCII:

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

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

# That prints: Bei Jing 

لاحظ أن هناك أحرف محددة من عرافة أيضا. تبدو مثل هذا: é (é).

استخدم فك تشفير HTML :: كيانات لترجمة الكيانات إلى الأحرف الفعلية. لتحويل ذلك إلى ASCII يتطلب المزيد من العمل. لقد استخدمت ICONV (واجهة PERL: نص :: ICONV) مع خيار Transliter مع بعض النجاح في الماضي. ولكن إذا كنت تتعامل مع مجموعة محدودة من الكيانات، أو أنك لا تحتاج فعليا، فقد تم تخفيضه إلى ما يعادله إلى ASCII، فقد تكون أفضل حالا في الحد من ما ينتج عنه Decode_entities أو تزويده بخرائط التحويل المخصصة. انظر HTML :: كيانات Doc.

هناك حفنة من كيانات HTML المحددة مسبقا - & " > وهلم جرا - هل يمكنك الكود الصعب.

ومع ذلك، فإن حالة الكيانات العددية الكبرى - { - ستكون أصعب بكثير، لأن هذه القيم هي Unicode., ، والتحويل إلى ASCII سوف يتراوح من صعبة ل غير ممكن.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top