一些字符在 URL 或 XML 文档中使用时有特殊的含义,因此必须针对这些含义对字符做适当编码以使其生效。
字串2
URL 中的特殊字符
在 URL 上执行的查询中,特殊字符被指定为 %xx,其中 xx 是字符的十六进制值。下表列出了这些特殊字符并描述了它们的含义。有关更多信息,请参见 http://www.faqs.org/rfcs/rfc1738.html 中的 RFC1738 规范。
字串9
|
特殊字符
字串2
|
特殊含义 字串6
|
十六进制值 字串6
|
+
字串8
|
表示空格(在 URL 中不能使用空格)。
字串5
|
%2B
字串6
|
/
字串7
|
分隔目录和子目录。
字串7
|
%2F
字串7
|
?
字串2
|
分隔实际的 URL 和参数。
字串6
|
%3F
字串4
|
%
字串4
|
指定特殊字符。
字串2
|
%25
字串3
|
#
字串1
|
表示书签。
字串6
|
%23
字串6
|
&
字串3
|
URL 中指定的参数间的分隔符。
字串8
|
%26
字串2
|
字串2
字串4
例如,考察下面的查询:
字串6
SELECT *
字串8
FROM Employees
字串5
WHERE EmployeeID=?
字串6
因为 ? 字符在 URL 中有特殊含义(分隔 URL 和传递的参数),所以在 URL 中指定该查询时,该字符被编码为 %3F。
字串9
下列 URL 将执行该查询。在 URL 中传递该参数值。 字串5
http://IISServer/nwind?sql=SELECT * FROM Employees WHERE EmployeeID=%3F FOR
XML AUTO&root=root&EmployeeID=1
字串8
浏览器将 ? 右侧的所有特殊字符(如 + 字符)都进行转义(即,将 ? 右侧的 + 字符转换成 %20)。
字串1
XML 中的特殊字符
> 和 < 这类字符是XML 标记字符,在 XML 中有特殊的含义。当在 SQL 查询(或 XPath 查询)中指定这些字符时,
必须对它们进行适当的编码(也称为实体编码)。下表列出了这些特殊字符并描述了它们的含义。有关更多信息,请参见
XML 1.0 规范 中的 XML 1.0 规范。 字串8
特殊字符 字串4
|
特殊含义
字串3
|
实体编码
字串6
|
>
字串9
字串9
|
开始标记。
字串4
|
>
字串4
|
<
字串6
字串8
|
结束标记。
字串4
|
<
字串4
|
"
字串3
|
引号。
字串8
|
"
字串4
|
'
字串8
|
撇号。
字串3
|
'
字串5
|
&
字串3
|
"&"符。
字串8
|
&
字串9
|
字串5
字串3
例如,考察下面的查询:
字串9
SELECT TOP 2 *
字串4
FROM [Order Details]
字串3
WHERE UnitPrice < 10
字串9
FOR XML AUTO
字串5
因为 < 字符在 XML 中有特殊含义,所以当在某模板(一个 XML 文档)中指定该查询时,必须将该字符编码为 >。
以下就是含有该查询的模板:
字串9
<ROOT xmlns:sql="urn:schemas-microsoft-com:xml-sql">
字串5
<sql:query>
字串1
SELECT top 2 *
字串6
FROM [Order Details]
字串2
WHERE UnitPrice < 10
字串3
FOR XML AUTO
字串5
</sql:query>
字串1
</ROOT>
字串7
URL 编码中的实体编码
字串3
有时可能需要同时指定 URL 编码与实体编码。例如,可在 URL 中直接指定以下模板(而不是指定文件名): 字串9
<ROOT xmlns:sql="urn:schemas-microsoft-com:xml-sql">
字串9
<sql:query>
字串9
SELECT top 2 *
字串8
FROM [Order Details]
字串1
WHERE UnitPrice < 10
字串9
FOR XML AUTO
字串7
</sql:query>
字串9
</ROOT>
字串1
在此例中,(为 < 标记字符指定的)实体编码 < 内的 & 字符在 URL 中有特殊含义,需要对其进行进一步
编码。必须将 & 字符编码为 %26,否则在 URL 中将把它视为参数分隔符。该 URL 于是被指定为:
字串7
http://IISServer/nwind?template=<ROOT xmlns:sql="urn:schemas-microsoft-com:xml-sql">
<sql:query>SELECT TOP 2 * FROM [Order Details] WHERE UnitPrice %26lt; 10 FOR XML AUTO
</sql:query></ROOT>
|
|