2016-10-04 50 views
0

我需要能夠存儲數據的屬性中的HTML格式以後要拾取的jQuery兩種格式:商店的HTML代碼中的數據屬性

  1. HTML
  2. 純文本

隨着我的PHP我保存HTML這樣的:

echo '<li data-desc="'. htmlspecialchars($myHTMLdescription) .'" class="myTerm">'. stripslashes($myItem) .'</li>'; 

後來我用JS得到的值:

$(document).on('click', '.myTerm', function() { 
    var thisTerm = $(this).text(); 
    var description = $(this).attr('data-desc'); 
    var descNoHTML = description.text(); 
}); 

如果在文本中有鏈接等HTML元素,descNoHTML似乎會破壞代碼。

+0

你能否提供一個破解它的'$ myHTMLdescription'樣本?它如何中斷,錯誤消息,顯示,JS功能等? – chris85

+0

正如我可以看到你從'data-desc'獲得'html',當然如果你做了description.text(),代碼就會崩潰,因爲你可能會得到第一個可用html元素的文本,裏面的文字。你不能將'html'轉換爲text()。這個功能不是爲此目的而設計的。 – Franco

回答

0

解碼使用JS

function decodeEntities(encodedString) { 
    var textArea = document.createElement('textarea'); 
    textArea.innerHTML = encodedString; 
    return textArea.value; 
} 
$(document).on('click', '.myTerm', function() { 
    var thisTerm = $(this).text(); 
    var description = $(this).attr('data-desc'); 
    description = decodeEntities(description); 
    var descNoHTML = description.text(); 
}); 

直接問任何問題之前編碼字符串,你應該嘗試搜索相同。有可能是你的問題的答案。我認爲this link對你有幫助。

0

嘗試:

var descNoHTML = $(description).text(); 
0

htmlspecialchars是在HTML的主要部分逃逸字符。例如,<,>&是HTML中的特殊字符。它們可分別作爲&lt;,&gt;&amp;轉義。

但是,屬性的​​雙引號是完全不同的環境。 <>&不是特殊字符。唯一的特殊字符是"。見https://www.w3.org/TR/html-markup/syntax.html#syntax-attributes。其實我到現在才意識到你無法逃避雙引號,但這就是規範所說的。所以,如果你想正確地做到這一點,你必須使用自己選擇的編碼自己逃脫,然後在閱讀屬性時避開它們。

對於",我們不能使用\",因爲根本不允許使用"。我們將"編碼爲%q。然後%是一個特殊字符,所以我們把它編碼爲%p。您的PHP系列變爲:

$myEscapedHTMLdescription = str_replace(array('%', '"'), array('%p', '%q'), $myHTMLdescription); 
echo '<li data-desc="'. $myEscapedHTMLdescription .'" class="myTerm">'. stripslashes($myItem) .'</li>'; 

請參閱http://php.net/manual/en/function.str-replace.php。然後在JavaScript你必須對它進行解碼:

var description = $(this).attr('data-desc') 
    .replace(/%q/g, '"') 
    .replace(/%p/g, '%'); 

這主要是未經測試(我沒有在這裏安裝了PHP),所以有可能是拼寫錯誤。