2012-10-13 15 views

回答

25

轉義HTML確實只涉及替換三個字符:<,>&。要獲得額外的積分,您還可以更換"'。因此,它不是一個很長sed腳本:

sed 's/&/\&amp;/g; s/</\&lt;/g; s/>/\&gt;/g; s/"/\&quot;/g; s/'"'"'/\&#39;/g' 
+0

看起來不錯,謝謝你 –

+0

@JamesEvans:不客氣! – ruakh

+0

+1優雅和高效。你應該在這裏發佈你的答案:http://stackoverflow.com/questions/5929492/bash-script-to-convert-from-html-entities-to-characters他們建議安裝'recode','perl','php ','xmlsarlet'和'w3m'(一個網頁瀏覽器大聲哭泣)。最後一個答案建議使用Python3,儘管默認情況下安裝(至少在Ubuntu中)也是過度的。 – WinEunuuchs2Unix

-1

無法評論還,所以這裏有一個新的答案:

以前sed替換毀損像

&lt; 

有效輸出到

&amp;lt; 

添加負loook超前如此「&」只改爲「& amp」如果那個「&」還沒有跟着「amp」修復:

sed 's/&(?!amp;)/\&amp;/g; s/</\&lt;/g; s/>/\&gt;/g; s/"/\&quot;/g; s/'"'"'/\&#39;/g' 
+5

大錯誤。當我對一個字符串「&」進行HTML編碼時,這是因爲我想讓它通過一些網絡瀏覽器呈現爲「&」。這就是爲什麼它必須變成'& amp'。這樣,HTML編碼和HTML解碼就處於平衡狀態。您不會僅僅因爲輸入_looks like_它已經被HTML編碼就抑制HTML編碼。 HTML編碼不是**冪等的。沒有把握,最終導致XSS漏洞。 –

+1

@Ruud是對的;實現這一目標的正確方法是首先逃避&符號,就像在ruakh的答案中一樣。 –

+1

我完全同意@Ru​​ud的說法,但他應該強調**未能把握導致XSS漏洞** – kmkaplan

5

可以使用recode工具:

echo 'He said: "Not sure that - 2<1"' | recode ascii..html 

輸出:

He said: &quot;Not sure that - 2&lt;1&quot; 
+0

如果沒有Python/Ruby/Perl,可能不可用。 – tbodt

相關問題