2009-10-21 63 views
3

我目前使用下面的代碼保存在他們面前消毒的字符串:當字符串已經被消毒,像這種情況發生時紅寶石消毒代碼...爲什麼和消毒

ERB::Util::h(string) 

我的問題:

string = "Watching baseball `&` football" 

消毒的字符串像:

sanitized_string = "Watching baseball `&` football" 

我可以只需轉動消毒轉換爲<,並通過替換將其轉換爲>

+1

看起來像一個奇怪的用例...你可以清理東西可變次數嗎?否則,'& amp'有什麼問題?'如果你知道你會在需要時將其反轉嗎? – ykaganovich 2009-10-21 20:59:29

回答

3

UNESCAPE第一,然後再逃避:

require 'cgi' 
string = "Watching baseball & football" 

CGI.escapeHTML(CGI.unescapeHTML(string)) 

=> "Watching baseball & football" 
+0

感謝大家的幫助! ..我會嘗試unescape的第一個答案。 – tdewell 2009-10-21 21:00:50

0

基於this snippet from Erubis快速的方法。

ESCAPE_TABLE = { '<'=>'&lt;', '>'=>'&gt;' } 
def custom_h(value) 
    value.to_s.gsub(/[<>]/) { |s| ESCAPE_TABLE[s] } 
end 
0

當然可以,或採取進一步您可以直接刪除整個標籤有一個基本的正則表達式是這樣的:

mystring.gsub(/<(.|\n)*?>/, '') 
0

你可以寫你自己的消毒劑,但也有很多的角落案件在消毒過程中有一些棘手的問題。

更好的方法可能是在清理字符串之前對字符串進行取消編碼 - h()是否有可以將字符串放入第一個字符的反轉?