我在XML文件中存储了大量的URL(大约100,000个)(以及其他一些数据)。它使用较少的URL工作得很好,但现在,XML文件变得非常大(因为标签和缩进)并且解析速度很慢。所以我考虑将所有URL分组到一个XML元素中,为此我需要一个分隔符。作为一个例子,我想从此开始:
<document>
<bigGroupOfURLs>
<OneURL>
<nameOfData1>data1_1</nameOfData1>
<nameOfData2>data1_2</nameOfData2>
<URL>www.site1.com</URL>
</OneURL>
<OneURL>
<nameOfData1>data2_1</nameOfData1>
<nameOfData2>data2_2</nameOfData2>
<URL>www.site2.com</URL>
</OneURL>
</bigGroupOfURLs>
<someOtherData>...</someOtherData>
</document>
这样的事情(但不使用#):
<document>
<bigGroupOfURLs>
data1#data2#www.site1.com#data1#data2#www.site2.com
</bigGroupOfURLs>
<someOtherData>...</someOtherData>
</document>
这些URL将来自HTML文件中的标签,因此它们可以带有各种非标准字符。例如,以下是可能包含的示例:
<a href="http://ja.wikipedia.org/wiki/メインページ">メインページ</a>
<a href="http://en.wikipedia.org/wiki/Stack Overflow">Stack Overflow</a>
在那里,我们可以看到UTF-8字符和空格。这些URL被正确解释,我想在它们出现时存储它们。那么,保证哪个字符永远不会出现在URL中?我希望它是一个可打印的角色。请注意,这将在XML文件中,因此我可能不应使用字符</>
。
答案 0 :(得分:1)
您提到的两个网址实际上都是无效的:
http://ja.wikipedia.org/wiki/メインページ
http://en.wikipedia.org/wiki/Stack Overflow
如果您在浏览器中键入它们,它们将在发送到服务器之前进行百分比编码。根据{{3}},空格字符和以下可打印的ASCII字符在URL中无效:
" < > \ ^ ` { | }
多字节UTF-8序列也是无效的。也就是说,某些服务器可能仍然接受这些字符。
所以我建议你RFC 3986并用空格分隔它们。
答案 1 :(得分:1)
“URL”的定义不止一个。通常,术语用于“URI”或“IRI”更正确的地方。许多系统试图允许并允许根据规格在技术上不合法的东西; Postel的法律在这里适用,其不可避免的后果是,如果某些制度开始对他们所接受的东西持开放态度,那么其他所有人都必须效仿。
要使用的一个非常安全的分隔符是单个空格,尤其是如果您注意确保URL中的任何空格正确地% - 编码为%20。
但是在使用像这样的微语法之前,我希望确信XML解析时间确实是瓶颈。