ฉันจะแปลงเอนทิตีพิเศษ HTML ได้อย่างง่ายดายจากอินพุตสตรีมมาตรฐานใน Linux ได้อย่างไร


9

CentOS

มีวิธีง่ายๆในการแปลงเอนทิตีพิเศษ HTML จากสตรีมข้อมูลหรือไม่ ฉันกำลังส่งข้อมูลไปยังสคริปต์ทุบตีและบางครั้งข้อมูลนั้นมีเอนทิตีพิเศษ ตัวอย่างเช่น:

"ทดสอบ" & amp; ทดสอบ $ ทดสอบ! ทดสอบ @ # $% ^ & amp; * * * *

ฉันไม่แน่ใจว่าทำไมตัวละครบางตัวถึงแสดงได้ดีและอื่น ๆ ไม่ได้ แต่น่าเสียดายที่ฉันไม่สามารถควบคุมข้อมูลที่เข้ามาได้

ฉันคิดว่าฉันอาจจะสามารถใช้ SED ได้ที่นี่ แต่ดูเหมือนว่าจะยุ่งยากและมีแนวโน้มที่จะเกิดผลบวกปลอม มีคำสั่ง Linux ที่ฉันสามารถใช้กับที่เชี่ยวชาญในการถอดรหัสข้อมูลประเภทนี้หรือไม่?

คำตอบ:



14

Perl คือเพื่อนของคุณ (เช่นเคย) ฉันคิดว่ามันจะทำ:

perl -n -mHTML::Entities -e ' ; print HTML::Entities::decode_entities($_) ;'

เช่น:

echo '"test" & test $test ! test @ # $ % ^ & *' |perl -n -mHTML::Entities -e ' ; print HTML::Entities::decode_entities($_) ;'

ด้วยการส่งออก:

someguy@somehost ~]$ echo '"test" & test $test ! test @ # $ % ^ & *' |perl -n -mHTML::Entities -e ' ; print HTML::Entities::decode_entities($_) ;'
"test" & test $test ! test @ # $ % ^ & *

สิ่งนี้ใช้ได้กับแล็ปท็อป OSX10.8 ของฉันและโฮสต์ RHEL5.something
Jason Tan

ในการส่งออกไฟล์ใน UTF-8 ให้ใช้ binmode: echo "& laquo;" | perl -n -mHTML :: Entities -mutf8 -e 'binmode (STDOUT, ": utf8"); พิมพ์ HTML :: เอนทิตี :: decode_entities ($ _); '
falstaff

6

recodeดูเหมือนว่ามีอยู่ในที่เก็บแพ็คเกจเริ่มต้นของการแจกแจง GNU / Linux หลัก เช่นการถอดรหัสเอนทิตี HTML เป็น UTF-8:

…|recode html..utf8


0

ใช้ไฟล์ข้อความจาก stdin:

#!/bin/bash
#
while read lin; do
  newl=${lin//>/>}
  newl=${newl//&lt;/<}
  newl=${newl//&amp;/<}
  # ...other entites
  echo "$newl"
done

อาจต้องใช้ bash> = เวอร์ชัน 4

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.