我将尽量保持简洁:当涉及到URL中的单引号和逗号时,如果我没有编码,我就会被诅咒。
如果我将单引号保留在sitemap.xml loc条目中,一些爬虫(最显著的是必应)会将URL截断到单引号之前的点。
如果我根据'将单引号编码为本指南,一些爬虫会截断URL直到并包含符号。在我联系他们的技术支持之前,必应一直这样做。
然而,根据指南,我的sitemap.xml是“正确的”,谷歌网站管理员展示了一个垃圾-吨404's -其中大多数显示谷歌爬虫使用的sitemap.xml编码形式的网址(例如,http://example.com/someone'-lucky-day),而不是解码形式(http://example.com/someone's-lucky-day)。其他404'd URL包含逗号(例如,http://example.com/someone,-really-hates-me变为http://example.com/someone)。
有一点要注意:每当我的web应用程序出现500服务器错误时,我都会收到错误的电子邮件副本。电子邮件包含访问者尝试的URL (在本例中为爬虫)。在切换我的sitemap.xml编码单引号后,我没有收到任何这些错误报告;目前,这只是谷歌网站管理员的抱怨。
发布于 2015-02-17 04:18:46
页面中的HTML编码不能用作URL的一部分。
您必须对可能破坏URL的符号使用特殊的字符编码。
对于编码,您使用百分比符号开始字符,然后使用十六进制代码,我认为这意味着您试图使用的实际字符的ascii代码。
转到这个页面,使用表单并填写您的URL,看看它们应该如何编码。
http://www.w3schools.com/tags/ref_urlencode.asp
发布于 2015-03-20 12:05:27
等等..。从表面上看,在我看来,谷歌似乎是不正确的。或者说,标准(RFC 3986)的实现太严格了。(虽然系统在这方面确实存在差异。)
URL始终需要通过编码具有特殊意义的字符来编码/ 百分比编码 (如@mike状态),然后在XML文档中使用时编码XML实体(如果在HTML文档中使用,则编码为HTML实体)。
单引号和逗号在URL中被认为是"保留字符“,但在URL的路径部分中没有特殊的意义,可以作为-is使用,而不需要编码百分比。因此,像http://example.com/someone's-lucky-day这样的URL是完全有效的--这里不需要对'进行编码(它仍然需要在XML中编码)。澄清一下,编码这些字符的百分比没有坏处,事实上,如果你愿意的话,你可以对所有的字符进行编码!
参考资料:StackOverflow队列- URL目录部分的有效字符.
与谷歌的实现相冲突的还有,JavaScript方法encodeURI() (用于编码URL的路径部分)不对单引号和逗号字符进行编码。但是,对应的PHP函数rawurlencode()会这样做。在检查这些函数的输出时,JavaScript似乎严格遵循了标准;PHP并不这样做。
然而,另一个想法..。有编码问题吗?XML文档UTF-8编码了吗?这些字符真的是撇号和逗号,而不是卷曲引号或类似的东西吗?!
https://webmasters.stackexchange.com/questions/77283
复制相似问题