我想驗證是XHTML擴展的XML模板。現在在ID屬性中有特殊字符,如{
和|
。是否可以擴展XHTML DTD以將限制重寫爲ID屬性中允許的字符?還是由XML規範定義的字符?擴展XHTML DTD以在ID屬性中使用特殊字符
回答
您不能使用字符'{'和'|'直接在ID屬性,因爲在XML specification它說
Values of type ID must match the Name production. A name must not appear more than once in an XML document as a value of this type; i.e., ID values must uniquely identify the elements which bear them.
名稱生產here。如果展開的語法規則,你看,允許在名稱中的字符被這些作品給出:
[4] NameStartChar ::= ":" | [A-Z] | "_" | [a-z] | [#xC0-#xD6] | [#xD8-#xF6] | [#xF8-#x2FF] | [#x370-#x37D] | [#x37F-#x1FFF] | [#x200C-#x200D] | [#x2070-#x218F] | [#x2C00-#x2FEF] | [#x3001-#xD7FF] | [#xF900-#xFDCF] | [#xFDF0-#xFFFD] | [#x10000-#xEFFFF]
[4a] NameChar ::= NameStartChar | "-" | "." | [0-9] | #xB7 | [#x0300-#x036F] | [#x203F-#x2040]
不幸的是,左大括號和管道都是不允許的。這些字符的碼點分別是#7B和#7C;不在公認的字符範圍內。
TL; DR:ID屬性的合法字符屬於XML規範,您的兩個字符不合法。
附錄
下面是一些例子。下列文件通過驗證的XHTML的W3C驗證網站:
<?xml version="1.0"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" lang="en-US" xml:lang="en-US">
<head>
<title>A title</title>
</head>
<body id="anid">
</body>
</html>
但下面不會
<?xml version="1.0"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" lang="en-US" xml:lang="en-US">
<head>
<title>A title</title>
</head>
<body id="ani{d">
</body>
</html>
我們得到的錯誤:
Line 8, Column 16: character "{" is not allowed in the value of attribute "id"
現在是相當有趣的是,如果你真的想在id名字左邊的大括號中,你可以試試這個:
<?xml version="1.0"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" lang="en-US" xml:lang="en-US">
<head>
<title>A title</title>
</head>
<body id="ani{d">
</body>
</html>
但你得到相同錯誤!你可能想試試這個;驗證器顯示符號散列x七b分號的行,但它認爲在那裏有左大括號。
底線是,你只需要不能的ids字符不是由XML規範允許的那些字符。
- 1. Joomla:擴展中的特殊字符
- 2. 在屬性名中的特殊字符
- 3. 使用屬性擴展字符串類?
- 4. 在DTD實體中使用特殊字符,如'+'
- 5. 帶特殊字符的xpath屬性
- 6. 屬性文件中的特殊字符
- 7. XML屬性值中的特殊字符
- 8. 插入特殊字符,如「#」的列舉的屬性值在XML DTD
- 9. VBS - 忽略\特殊字符屬性
- 10. 是否可以在DTD中定義通配符屬性?
- 11. 參考對象屬性,當屬性中包含特殊字符
- 12. 在bash中延遲通配符擴展,同時引用特殊字符
- 13. 斯威夫特。在子類中使用擴展屬性類型
- 14. shell擴展當特殊字符[]和*在表達式
- 15. 使用的對象屬性名稱特殊字符
- 16. 如何使用DOJO添加具有特殊字符的屬性
- 17. 在jQuery中使用特殊字符
- 18. 在php中使用特殊字符echo
- 19. 在Google Charts中使用特殊字符
- 20. 在XSL中使用特殊字符
- 21. 在Python中使用特殊字符
- 22. 在XML屬性中轉義特殊(HTML標記)字符?
- 23. 特殊字符無法在XSL屬性中顯示?
- 24. [R使用特殊字符
- 25. MSAccess使用特殊字符
- 26. 擴展屬性
- 27. 在css中使用僞特殊字符之前插入特殊字符
- 28. 如何在Angular2 HostBinding屬性中使用特殊字符(即冒號)?
- 29. 如何在PHP中使用DOMDocument節點的特殊字符來設置屬性?
- 30. 通過PropertyGrid向字符串屬性添加特殊字符
謝謝!所以我必須重命名屬性。 – stofl
是的,我怕你必須重命名它們。我在我的答案中添加了一些示例驗證,表明您甚至無法嘗試使用字符實體來擊敗驗證程序。規格是規格。 :) –
非常感謝。 – stofl