2
有隻處理XML作爲字符串轉義XML標籤內容中的XML特殊字符的方式是否可以使用正則表達式完成?(正則表達式) 嘗試,因爲它包含了一些標籤裏面的「<」字來創建新的XML()從字符串時,我得到異常的XML的運行時錯誤的ActionScript/flex3:轉義XML特殊字符,如<, >「和」內/標籤內容中
有隻處理XML作爲字符串轉義XML標籤內容中的XML特殊字符的方式是否可以使用正則表達式完成?(正則表達式) 嘗試,因爲它包含了一些標籤裏面的「<」字來創建新的XML()從字符串時,我得到異常的XML的運行時錯誤的ActionScript/flex3:轉義XML特殊字符,如<, >「和」內/標籤內容中
您可以使用這樣的事情:
public static function escapeXMLTagContents(a_string:String):String{
var l_indexOfSpecialChar:int = -1,
l_tagsMatch:RegExp =/<(\?|[a-zA-Z_]{1}|\/{1})[^<]*?>/g,
l_tags:Array = [],
l_tagCharacterIndexes:Array = [],
l_stringCopy:String = new String(a_string),
i:int = -1,
l_replaceArray:Array = [],
l_return:String = "",
l_tagCharIndex:int = -1,
l_replaceChar:String = "";
l_replaceArray.push("&|&");
l_replaceArray.push("<|<");
l_replaceArray.push(">|>");
l_replaceArray.push("\"|"");
l_replaceArray.push("'|'");
l_tags = a_string.match(l_tagsMatch);
i = l_tags.length;
while (--i > -1){
var l_tagText:String = l_tags[i];
var l_startIndex:int = l_stringCopy.lastIndexOf(l_tagText);
var l_endIndex:int = l_startIndex + (l_tagText.length - 1);
for (var j:int = l_startIndex; j <= l_endIndex; j++){
if(l_tagCharacterIndexes.indexOf(j) < 0){
l_tagCharacterIndexes.push(j);
}
}
l_stringCopy = l_stringCopy.substring(0, l_startIndex);
}
l_return = new String(a_string);
for each (l_replaceChar in l_replaceArray){
l_stringCopy = new String(l_return);
while ((l_indexOfSpecialChar = l_stringCopy.lastIndexOf(l_replaceChar.charAt(0))) > -1) {
// determine if it char needs to be escaped (i.e is inside tag contents)
if(l_tagCharacterIndexes.indexOf(l_indexOfSpecialChar) == -1){
l_return = l_return.substring(0, l_indexOfSpecialChar) + l_replaceChar.split("|")[1] + l_return.substring(l_indexOfSpecialChar+1);
// adjust indexes
for (i = 0; i < l_tagCharacterIndexes.length; i++) {
l_tagCharIndex = l_tagCharacterIndexes[i];
if(l_tagCharIndex >= l_indexOfSpecialChar) {
l_tagCharacterIndexes[i] = l_tagCharacterIndexes[i] + String(l_replaceChar.split("|")[1]).length-1; // -1 from the old characther "&,<,>," or '"
}
}
}
l_stringCopy = l_stringCopy.substring(0, l_indexOfSpecialChar);
}
}
return l_return;
}
你試過用CDATA嗎?http://www.w3schools.com/xml/xml_cdata.asp – divillysausages
@ [divillysausages](http://stackoverflow.com/users/639441/divillysausages):答案是針對客戶端代碼(修復),以防您無權訪問修改服務器代碼/不想修改服務器代碼。 – OviC