我正在驗證腳本,但我遇到了一個非常特殊的問題。確定字符串是否通過jQuery編碼HTML?
如果用戶輸入恰好是編碼html字符的字符串(如&
或&
),則會輸出字符(本例中爲&)。我的問題是:是否可以編寫一個函數來確定字符串是否爲編碼字符?所以,如果用戶輸入上述兩個選項之一,我想啓動一個特定的功能,如果它是一個非編碼字符,我想做其他事情。
有沒有辦法做到這一點?
我正在驗證腳本,但我遇到了一個非常特殊的問題。確定字符串是否通過jQuery編碼HTML?
如果用戶輸入恰好是編碼html字符的字符串(如&
或&
),則會輸出字符(本例中爲&)。我的問題是:是否可以編寫一個函數來確定字符串是否爲編碼字符?所以,如果用戶輸入上述兩個選項之一,我想啓動一個特定的功能,如果它是一個非編碼字符,我想做其他事情。
有沒有辦法做到這一點?
您可以檢查是否字符串包含編碼的字符,通過比較編碼VS解碼長度:
var string = "Your encoded & decoded string here"
function decode(str){
return decodeURIComponent(str).replace(/</g,'<').replace(/>/g,'>');
}
if(string.length == decode(string).length){
// The string does not contain any encoded html.
}else{
// The string contains encoded html.
}
此外,這是significantly faster than the jQuery method that was suggested.
根據定義,如果你不知道的東西是否爲編碼HTML實體或不是你不知道的。您可以將來自某個源的所有文本視爲已編碼或未編碼。爲什麼?因爲這全都只是文字。 「& amp;」只是文字。我意思是寫「& amp」這裏。我不想讓任何人解釋它,我希望它的字面意思是「& amp」。
你怎麼知道用戶的意思?如果你開始根據猜測來替換用戶輸入的文本,在某些情況下你總是會搞砸它。這是一個典型的情況,所有的「:D」被圖形化的笑臉代替,當你真的想要輸入「:D」時,這很煩人。
如果您想要始終保留用戶輸入的內容,請始終通過HTML編碼函數運行所有用戶輸入,該函數將所有特殊字符替換爲實體。見The Great Escapism (Or: What You Need To Know To Work With Text Within Text)。
偉大的資源和優點。 – streetlight
這樣的事情會做到這一點。
function containsEncoded (val){
var rHTMLEncoded = /&[^\s]*/;
return rHTMLEncoded.test(val) ;
}
// Usage
var encoded = containsEncoded("&");
你想要測試這兩個具體的例子,或爲_any_ html字符實體?如果只是這兩個簡單的正則表達式應該這樣做:'if(/ & | & /.test(strVar)){...}' – nnnnnn
@ streetlight-您可以onkeypress()並檢查(&或&)它將運行良好。 –
我正在嘗試做所有的html字符條目,而不僅僅是這兩個特定的字符。謝謝你! – streetlight