假设我允许我的用户提交包含一些文本字段的表单(我不是在谈论密码).我的用户偶尔会使用非ASCII字符,如俄语,中文等,所以我在我的数据库中使用UTF-8字符集.问题是,我是否应该真正允许所有可能的UTF-8字符?我查看了ASCII表,看到字符0到31与文本无关,除了换行符和空格.字符176到223似乎是出于装饰目的:p.我应该限制它们吗?
W3C在多语言表单编码的示例正则表达式中跳过这些字符:
$field =~
m/\A(
[\x09\x0A\x0D\x20-\x7E] # ASCII
| [\xC2-\xDF][\x80-\xBF] # non-overlong 2-byte
| \xE0[\xA0-\xBF][\x80-\xBF] # excluding overlongs
| [\xE1-\xEC\xEE\xEF][\x80-\xBF]{2} # straight 3-byte
| \xED[\x80-\x9F][\x80-\xBF] # excluding surrogates
| \xF0[\x90-\xBF][\x80-\xBF]{2} # planes 1-3
| [\xF1-\xF3][\x80-\xBF]{3} # planes 4-15
| \xF4[\x80-\x8F][\x80-\xBF]{2} # plane 16
)*\z/x;
Run Code Online (Sandbox Code Playgroud)
确保它是有效的UTF-8和Unicode? 是
确保它不包含某些字符,例如控制代码? 可能没有必要
您应该注意,即使您在表单中使用UTF-8,当所有用户代理向您发送表单数据时,它们也可能无法从所有用户代理中获得有效的UTF-8,因此您将必须对其进行过滤。无效的UTF-8可以采用多种形式,其中一些形式是
在输入过程中,需要过滤掉上述所有内容,否则您将无法存储有效的Unicode。
如果要提供使用Unicode子集的有效HTML或XHTML,则还需要过滤掉(在输入或输出处):
| 归档时间: |
|
| 查看次数: |
1590 次 |
| 最近记录: |