日期:2014-05-17 浏览次数:20658 次
????? 看到一篇有趣的文章
,关于表单提交确实没有尝试过这种设置,一般设置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 编码提交到服务器去了(服务器是否会自动转换?待测)。
??????? 大家熟悉的 < > ,空白等对应有实体名 < ,> ,实际上所有字符都对应有实体,只不过大多数字符只有 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
?
?
实体数字也可以指定16进制,那么这时格式为
&# (加上) x (加上) 字符的unicode编码16进制 (加上) ;
例如: = 表示 = ,而 a 表示 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> <b>b</b></textarea>
?
?
其实保险情况下,应该编码,否则可能会导致意外终结 textarea 。
?
<textarea> xx</textarea></textarea>?
但是当用户输入或程序设置 <b> 为 textarea 内容时就有显著差别了:
?
提交到数据库中,存的是? <b>
?
但是如果原封不动输出到页面中时:
?
<textarea> <b> </textarea>
?实际上 textarea 里面的内容会被首先 decodeHtml 后作为 textarea 的值,显示在输入文本框中则是:
?
<b>
?
而不是用户先前输入的
?
<b>
?
这时