我打算将现有的 Intranet 系统转换为 CodeIgniter。我一直使用 UTF-8,因此它可以处理各种不同的字符,这对于系统来说是必不可少的(输出发票、地址标签等)。
我决定在输入时自动替换一些字符,因为它们最终会使系统用户感到困惑。
- 单引号和双引号。替换为正常的撇号/引号
- En dash 和 em dash,替换为正常的连字符
- 省略号,替换为三个句号
至少这些标点符号现在都被一致地使用和存储了。
在这个系统中,要存储在数据库中的数据总是由 POST 接收,所以我在每次页面加载时在 POST 数组上运行以下函数......
function nasty_chars_replace(&$var) {
$trans_table = array(
chr(0xe2).chr(0x80).chr(0x9a) => '\'', //SINGLE LOW-9 QUOTATION MARK
chr(0xe2).chr(0x80).chr(0x9e) => '"', //DOUBLE LOW-9 QUOTATION MARK
chr(0xe2).chr(0x80).chr(0xa6) => '...', //HORIZONTAL ELLIPSIS
chr(0xe2).chr(0x80).chr(0x98) => '\'', //LEFT SINGLE QUOTATION MARK
chr(0xe2).chr(0x80).chr(0x99) => '\'', //RIGHT SINGLE QUOTATION MARK
chr(0xe2).chr(0x80).chr(0x9c) => '"', //LEFT DOUBLE QUOTATION MARK
chr(0xe2).chr(0x80).chr(0x9d) => '"', //RIGHT DOUBLE QUOTATION MARK
chr(0xe2).chr(0x80).chr(0x93) => '-', //EN DASH
chr(0xe2).chr(0x80).chr(0x94) => '-' //EM DASH
);
foreach ($trans_table as $utf8_code => $replace) {
$var = str_replace($utf8_code, $replace, $var);
}
return trim($var);
}
array_walk_recursive($_POST, 'nasty_chars_replace');
是否有一种方法可以在 CodeIgniter 中全局对所有 POST 数据(如果 POST 存在)执行类似操作?
有没有其他人做这样的事情?
是否有任何其他容易混淆的字符我应该考虑“清理”(而不是这样清理)以保持数据一致性?
编辑:这甚至是个好主意吗?
编辑 2:我应该说我也trim()
所有 POST 数据以及删除前导/尾随空格。因此,如果有人决定只用空格填充输入,验证可能会失败。