Coo*_*J86 27 ruby unicode whitespace json utf-8
我有一些情况,\u00a0当编码为utf-8 json时,来自html textarea或输入的用户输入数据有时会发送(非中断空格)而不是空格.
我认为这是Firefox中的一个错误,因为我知道用户不是故意放入不间断的空格而不是空格.
Ruby中还有两个错误,其中一个可以用来对抗另一个.
无论出于何种原因\s不匹配\u00a0.
但是[^[:print:]],这绝对不应该匹配)并且\xC2\xA0两者都匹配,但我认为那些是不太理想的方式来处理这个问题.
是否有其他建议可以解决这个问题?
Jo *_*iss 40
使用/\u00a0/匹配非中断空格.例如,s.gsub(/\u00a0/, ' ')将所有非中断空格转换为常规空格.
使用/[[:space:]]/以匹配所有的空白,包括Unicode空白像非换空间.这与之不同/\s/,它只匹配ASCII空格.
另请参阅:Ruby Regexp文档
如果你不能\s用于Unicode空格,那就是Ruby正则表达式实现中的一个错误,因为根据UTS#18"Unicode正则表达式"关于兼容性属性 a的附件C\s,绝对需要匹配任何Unicode空白代码点.
由于详细说明标准建议书和POSIX兼容性的两列在\s案例中是相同的,因此不允许摆动.你无法记录下这方面:你不符合Unicode标准,尤其是UTS#18的RL1.2a,如果你不这样做的话.
如果您不符合RL1.2a,则不符合1级要求,这是在Unicode上使用正则表达式所需的最基本和基本功能.没有它,你几乎迷失了. 这就是标准存在的原因.我的回忆是Ruby也无法满足其他几个1级要求.因此,如果您确实需要使用正则表达式处理Unicode,则可能希望使用满足至少1级的编程语言.
请注意,您不能使用Unicode通用类别属性一样\p{Zs}放置\p{Whitespace}.那是因为Whitespace属性是派生属性,而不是一般类别.还包含控制字符,而不仅仅是分隔符.
| 归档时间: |
|
| 查看次数: |
9123 次 |
| 最近记录: |