我最近(从 these questions)了解到,在某些时候,建议在href参数中编码&符号。也就是说,而不是写:
<a href="somepage.html?x=1&y=2">...</a>

一个人应该写:

<a href="somepage.html?x=1&amp;y=2">...</a>

显然,前一个例子不起作用,但浏览器错误恢复意味着它。

在HTML5中仍然如此吗?

我们现在已经过了严苛的XHTML要求时代。这是XHTML严格处理的要求,还是我作为Web开发人员应该知道的呢?

解决方法

确实,引自 W3C Differences Page的HTML5和HTML4之间的差异之一是:

The ampersand (&) may be left unescaped in more cases compared to HTML4.

实际上,HTML5规范描述了确定消费(和解释)字符意味着什么算法的实际算法。

特别是,在HTML5规范第8章的section on tokenizing character references中,我们看到当你在一个属性中时,你会看到一个符号字符后面跟着:

>标签,LF,FF,空格,<,&,EOF或其他允许的字符(如果引用属性值则为“或”,如果不是,则为“>”)===>然后&符号为只是一个&符号,不用担心;
>数字符号===>然后HTML5标记生成器将通过许多步骤来确定它是否具有数字字符实体引用,但请注意,在这种情况下,一个会受到解析错误(请阅读规范)
>任何其他角色===>解析器将尝试查找命名的字符引用,例如& notin;。

最后一个案例是你感兴趣的案例,因为你的例子有:

<a href="somepage.html?x=1&y=2">...</a>

你有角色序列

> AMPERSAND
>拉丁文小写字母Y.
>平等标志

现在这里是HTML5规范中与您的案例相关的部分,因为y不是命名实体引用:

If no match can be made,then no characters are consumed,and nothing is returned. In this case,if the characters after the U+0026 AMPERSAND character (&) consist of a sequence of one or more alphanumeric ASCII characters followed by a U+003B SEMICOLON character (;),then this is a parse error.

你没有分号,所以你没有解析错误。

现在假设你有,

<a href="somepage.html?x=1&eacute=2">...</a>

这是不同的,因为& eacute;是HTML中的命名实体引用。在这种情况下,以下规则开始:

If the character reference is being consumed as part of an attribute,and the last character matched is not a “;” (U+003B) character,and the next character is either a “=” (U+003D) character or an alphanumeric ASCII character,then,for historical reasons,all the characters that were matched after the U+0026 AMPERSAND character (&) must be unconsumed,and nothing is returned. However,if this next character is in fact a “=” (U+003D) character,then this is a parse error,because some legacy user agents will misinterpret the markup in those cases.

因此,=使其成为错误,因为旧版浏览器可能会感到困惑。

尽管HTML5规范似乎不遗余力地说“好吧这个&符号没有开始一个字符实体引用所以这里没有引用”这个事实你可能遇到有命名引用的URL(例如,isin,part, sum,sub)会导致解析错误,那么恕我直言你最好用它们。但是,当然,你只询问限制是否放宽了属性,而不是你应该做什么,它看起来确实存在。

看看验证器可以做什么会很有趣。

是否仍需要在HTML5中的URL中编码&符号?的更多相关文章

  1. 使用HTML5做的导航条详细步骤

    这篇文章主要介绍了用HTML5做的导航条详细步骤,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下

  2. 详解HTML5中的picture元素响应式处理图片

    这篇文章主要介绍了详解HTML5中的picture元素响应式处理图片,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧

  3. html5利用canvas实现颜色容差抠图功能

    这篇文章主要介绍了html5利用canvas实现颜色容差抠图功能,非常不错,具有一定的参考借鉴价值,需要的朋友可以参考下

  4. HTML5拖拽功能实现的拼图游戏

    本文通过实例代码给大家介绍了HTML5拖拽功能实现的拼图游戏,代码简单易懂,非常不错,具有一定的参考借鉴价值,需要的朋友参考下吧

  5. HTML5实现直播间评论滚动效果的代码

    这篇文章主要介绍了HTML5实现直播间评论滚动效果的代码,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下

  6. 使用Html5多媒体实现微信语音功能

    这篇文章主要介绍了使用Html5多媒体实现微信语音功能,需要的朋友可以参考下

  7. HTML5 播放 RTSP 视频的实例代码

    目前大多数网络摄像头都是通过 RTSP 协议传输视频流的,但是 HTML 并不标准支持 RTSP 流。本文重点给大家介绍HTML5 播放 RTSP 视频的实例代码,需要的朋友参考下吧

  8. html5 拖拽及用 js 实现拖拽功能的示例代码

    这篇文章主要介绍了html5 拖拽及用 js 实现拖拽,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下

  9. HTML5自定义视频播放器源码

    这篇文章主要介绍了HTML5自定义视频播放器源码,非常不错,具有一定的参考借鉴价值,需要的朋友可以参考下

  10. HTML5新增form控件和表单属性实例代码详解

    这篇文章主要介绍了HTML5新增form控件和表单属性实例代码详解,需要的朋友可以参考下

随机推荐

  1. 微信小程序canvas实现水平、垂直居中效果

    这篇文章主要介绍了小程序中canvas实现水平、垂直居中效果,本文图文实例代码相结合给大家介绍的非常详细,具有一定的参考借鉴价值,需要的朋友可以参考下

  2. 使用HTML5做的导航条详细步骤

    这篇文章主要介绍了用HTML5做的导航条详细步骤,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下

  3. H5最强接口之canvas实现动态图形功能

    这篇文章主要介绍了H5最强接口之canvas实现动态图形功能,需要的朋友可以参考下

  4. Canvas高级路径操作之拖拽对象的实现

    这篇文章主要介绍了Canvas高级路径操作之拖拽对象的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧

  5. html5视频自动横过来自适应页面且点击播放功能的实现

    这篇文章主要介绍了h5视频自动横过来自适应页面且点击播放,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下

  6. 详解HTML5中的picture元素响应式处理图片

    这篇文章主要介绍了详解HTML5中的picture元素响应式处理图片,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧

  7. canvas像素点操作之视频绿幕抠图

    这篇文章主要介绍了canvas像素点操作之视频绿幕抠图的相关资料,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧

  8. html5利用canvas实现颜色容差抠图功能

    这篇文章主要介绍了html5利用canvas实现颜色容差抠图功能,非常不错,具有一定的参考借鉴价值,需要的朋友可以参考下

  9. canvas绘制视频封面的方法

    这篇文章主要介绍了canvas绘制视频封面的方法的相关资料,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧

  10. HTML5拖拽功能实现的拼图游戏

    本文通过实例代码给大家介绍了HTML5拖拽功能实现的拼图游戏,代码简单易懂,非常不错,具有一定的参考借鉴价值,需要的朋友参考下吧

返回
顶部