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编码提交到服务器去了(服务器是否会自动转换?待测)。
??????? 大家熟悉的 < > ,空白等对应有实体名 < ,> ,实际上所有字符都对应有实体,只不过大多数字符只有 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 以及写它在页面中指定的值可以编码也可以不编码,一般情况下效果差别不大:
?
/^[\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为;”