`
yiminghe
  • 浏览: 1460419 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

html 实体编码问题

阅读更多

      看到一篇有趣的文章 ,关于表单提交确实没有尝试过这种设置,一般设置html的meta以及页面为gbk或utf-8编码,那么表单中的中文会以gbk或utf-8编码后在网络上以ascii传播,或者手工构造url用encodeURIComponent utf-8提交。


       而在上面文章中,设置页面编码为 text/html; charset=ISO-8859-1,如这里的 google (默认下google 为utf-8编码),填写中文(某些浏览器?待测)提交后实际上因为中文没有在 iso-8859-1 的对应编码导致浏览器将中文字符的html entity 编码提交到服务器去了(服务器是否会自动转换?待测)。


        大家熟悉的 < > ,空白等对应有实体名 &lt; ,&gt; &nbsp;,实际上所有字符都对应有实体,只不过大多数字符只有 entity number,而没有entity name ,entity number 的规则为


        &# (加上) 字符的unicode编码十进制 (加上) ;

 


        如上例的google,firefox提交"我"结果为:q=%26%2325105%3B ,%26为&,%23为#,25105为“我”的unicode码点值,%3b为;

 

updated 2010-11-24

 

根据介绍 xml 特殊字符输入的提示:

 

http://www.regular-expressions.info/unicode.html


XML Schema   does not have a regex token for matching Unicode code points. However, you can easily use XML entities like  &#xFFFF;   to insert literal code points into your regular expression.

 

 

实体数字也可以指定16进制,那么这时格式为


&# (加上) x (加上) 字符的unicode编码16进制 (加上) ;


例如: &#0061; 表示 = ,而 &#x0061; 表示 a

 

         如不涉及变量逻辑,实际上以往的js向html写入特殊字符 "\uxxxx",可以替换为 "&#yyyyy",区别是 xxxx必须为16进制且为4位(必要时0填充),而yyyyy是不限位数的十进制数。



PS: javascript获得字符编码


   javascript 中除了 encodeURI系列,以及被废弃的escape(强烈不建议用,也不知道能用在什么地方),String.prototype.charCodeAt可以很方便的获得字符串中某个位置字符的unicode十进制编码 ,结合String.fromCharCode 可以等价与 java 中的 getBytes 和 new String 的 unicode 应用。十六进制与10进制之间的转换可以用Number.prototype.toString(radix)进行处理。

 

 

PS2: textarea 中 html 内容编码问题

 

另一点要注意的是:由于 textarea 以及写它在页面中指定的值可以编码也可以不编码,一般情况下效果差别不大:

 

<textarea> <b>b</b></textarea>


<textarea> &lt;b&gt;b&lt;/b&gt;</textarea>

 

 

其实保险情况下,应该编码,否则可能会导致意外终结 textarea 。

 

<textarea> xx</textarea></textarea>
 

但是当用户输入或程序设置 &lt;b&gt; 为 textarea 内容时就有显著差别了:

 

提交到数据库中,存的是  &lt;b&gt;

 

但是如果原封不动输出到页面中时:

 

<textarea>
&lt;b&gt;
</textarea>

 实际上 textarea 里面的内容会被首先 decodeHtml 后作为 textarea 的值,显示在输入文本框中则是:

 

<b>

 

而不是用户先前输入的

 

&lt;b&gt;

 

这时可以知道实体编码对于 textarea 在页面中的回填值(脚本设置则不需要)是十分必要的,对于 velocity 模板可采用 $encode.html (或者配置 ):

 

<textarea>
$encode.html($content)
</textarea>
 

同理 input !

 

 

PS3 &nbsp; 不间断空格问题

 

&nsbp; 属于 html 特有的命名实体,相当于 &#160; (不间断空格)。无论多少个 &nbsp; 并排放置都不会导致浏览器换行!

 

需要注意的是 ie 正则表达式下 \s 对于不间断字符存在 bug:

 

 

/^\s$/.test(String.fromCharCode(160))
// ie => false
// firefox/chrome => true

 

保险点需要写成:

 

 

/^[\s\xa0]$/.test(String.fromCharCode(160))
 

further reading :

 

html 实体字符值问题

 

html codes

分享到:
评论
1 楼 cnwander 2010-09-13  
“ 如上例的google,firefox提交"我"结果为:q=%26%2325105%3B ,%26为&,%23为#,25105为“我”的unicode码点值,%3b为;”
应该有误,印象中如果以get方式提交,地址栏中的编码,IE系列,FF是gbk编码,chrome是utf-8编码。

废弃的escape,听人说如果你想提交以页面本身编码的数据可以用它
因为encodeURIComponent会以utf-8编码
不过我测试,escape以utf-16(win下)编码,OMG

相关推荐

    HTML实体编码:XSS防御的关键策略

    HTML实体编码是防御XSS攻击的一种重要手段,它通过将特殊字符转换为它们的HTML实体形式,从而防止这些字符被浏览器错误地解释为HTML或JavaScript代码。本文将详细探讨HTML实体编码在XSS防御中的作用,并提供相关的...

    HTML字符实体参考

    HTML字符实体是网页编码中的一种重要机制,它允许开发者在HTML文档中插入特殊字符或无法直接在源代码中使用的字符。这些实体以`&`开头,后跟一个名称(命名实体)或者一个数字(数值实体),并以`;`结束。在标题提到...

    php将字符串转为HTML的实体类.zip

    在PHP编程中,将字符串转为HTML实体是一个重要的安全措施,可以防止XSS(跨站脚本攻击)等潜在的安全问题。HTML实体是用于在HTML文档中表示特殊字符的符号,例如"&amp;"代表"&","&lt;"代表","&gt;"代表"&gt;"。这样做...

    HTML字符实体文檔

    总的来说,"HTML字符实体文檔"是一个非常实用的资源,对于所有涉及HTML编码的开发者来说都是必不可少的参考工具。通过深入学习和实践,我们可以更好地理解和运用这些字符实体,提升我们的HTML编程能力。

    实现HTML编码和解码的JavaScript工具类

    1. HTML编码:将HTML特殊字符转换为它们的HTML实体等价物。例如,`会变成`&lt;`,`&gt;`会变成`&gt;`,`"`会变成`&quot;`,`'`会变成`&apos;`。这一步可以防止恶意代码注入,因为浏览器不会将这些实体解析为实际的HTML...

    编码转换小工具,包含多种编码的相互转换[html编码转换 unicode编码转换 url编码转换 编码转换],基于framework 3.5的winform程序

    这个小工具可以帮助用户将文本中的特殊字符转换为它们相应的HTML实体,以便在网页中正确显示。 2. **Unicode编码**:Unicode是一种国际标准,旨在统一世界上所有语言的字符表示。它使用一个唯一的数字(Unicode码点...

    一种适用于实体与非实体的快速区域编码算法

    ### 一种适用于实体与非实体的快速区域编码算法 #### 摘要 本文介绍了一种新型的基于轮廓的快速区域编码算法,该算法旨在解决传统快速区域编码算法在处理实时性和内孔问题上的局限性。通过对辅助右轮廓点的应用,...

    C#字符串.HTML编码处理方式

    该方法会自动将`, `&gt;`, `&`等特殊字符转换为其对应的HTML实体表示,从而避免了手动编写正则表达式的复杂性。 #### 4. 总结 在C#开发中,对于从数据库或其他来源获取的数据,进行适当的HTML编码处理是非常重要的。...

    mp-html文件夹,小程序多文本乱码问题

    可以使用HTML实体(如`&nbsp;`代替空格)或者Unicode编码(如`\u00A0`代替空格)。 3. **小程序编译器设置**: - **编译器配置**:检查微信开发者工具的设置,确认其是否正确识别和处理文件的编码。在工具的“项目...

    HTML编码转换.rar

    3. HTML实体编码:除了预定义的实体,还可以使用“&”字符后跟字符的Unicode编号来表示任何Unicode字符,如“&#[Unicode编号];”。 现在,我们转向易语言,这是一种中文编程语言,特别适合初学者和快速开发。易语言...

    HTML特殊符号对照表、字符实体[收集].pdf

    这些编码方式通常以“&”符号开头,后面跟着实体名称或实体编号。例如,使用“&lt;”来表示小于号,使用“&gt;”来表示大于号。 在HTML特殊符号对照表中,我们可以找到各种特殊符号和字符的字符实体形式。这些特殊...

    HTML字符编码大全

    在HTML中,有两种主要的字符编码方式:实体引用(Entity References)和数字字符引用(Numeric Character References)。实体引用以"&"开头,后面跟着一个名称,以";"结束,例如"&lt;"代表小于号("),"&gt;"代表大于...

    文章代码转HTML实体插件forTypecho

    HTML实体是一种编码方式,通过使用特定的数字或字母组合来代表无法直接在HTML文档中使用的特殊字符,如`(小于号)和`&gt;`(大于号)。当在文章中插入代码时,这些特殊字符如果不进行转换,可能会引起HTML解析错误,...

    HTML特殊字符编码大全.

    HTML特殊字符编码是网页设计与开发中不可或缺的一部分,它们用于在HTML文档中插入无法直接键入的字符,或者为了确保跨浏览器兼容性而使用的字符实体。以下是对标题、描述及部分给定内容中的知识点进行的详细解读: ...

    如何解决页面和脚本其中一个是乱码的问题

    4. **HTML实体编码**:有时,为了兼容性考虑,可以使用HTML实体编码来替代某些特殊字符。例如,使用`&amp;`代替`&`。 #### 三、具体解决方案 1. **统一编码格式**:确保整个网站的所有文件都采用同一种编码格式,...

    易语言源码易语言HTML编码转换源码.rar

    实体编码是使用"&amp;"、"&lt;"等特殊符号来代替HTML中的特殊字符,防止它们被浏览器解析为HTML标签。Unicode编码则通常使用"&#"加上字符的Unicode值来表示,例如"&#123;"代表左花括号"{"。 易语言源码中涉及的HTML...

    html中的特殊字符转换

    在服务器端和客户端之间传输数据时,可能会涉及到字符编码问题。确保正确设置字符编码(如UTF-8)并理解如何解码特殊字符实体是至关重要的,否则可能导致乱码或显示异常。 总结,HTML中的特殊字符转换是确保网页...

    rust-htmlescape —编码/解码HTML实体-Rust开发

    用于Rust示例HTML实体编码库。 并使用htmlescape :: {相关功能在这里}; 是用于RustHTML实体编码库示例用法所有示例均假设使用外部包装箱htmlescape; 并使用htmlescape :: {相关功能在这里}; 存在。 ### Encoding ...

    常用的字符实体

    总之,HTML字符实体是网页设计者和开发者不可或缺的工具,它们不仅解决了特殊字符的显示问题,还极大地丰富了网页内容的表现形式,使网页能够跨越不同的文化和语境,实现全球范围内的有效沟通。

Global site tag (gtag.js) - Google Analytics