让我们考虑一下我将永远做一个
SET NAMES 'utf8'
到 mysql 连接(所以我需要多字节转义)。
是否有不需要 mysql 连接的 mysql_real_escape_string 的安全替代方案?
在官方页面我发现了一个comment像这样使用 str_replace:
if(!empty($inp) && is_string($inp)) {
return str_replace(array('\\', "\0", "\n", "\r", "'", '"', "\x1a"),
array('\\\\', '\\0', '\\n', '\\r', "\\'", '\\"', '\\Z') , $inp);
}
够了吗?
如果 mysql_real_escape_string 只会转义相同的值,为什么它需要当前字符集? (如官方页面php.net/mysql_real_escape_string所述)
谢谢
最佳答案
首先,有很多数据库抽象库
(我之前使用过 dbFacile:https://github.com/alanszlosek/dbFacile)。
SQL 预配对语句总是是个好主意。
但是对于你的实际问题......
来自这篇文章:Alternative to mysql_real_escape_string without connecting to DB
我真的认为这是一个很好的选择:
public function escape($string) {
$return = '';
for($i = 0; $i < strlen($string); ++$i) {
$char = $string[$i];
$ord = ord($char);
if($char !== "'" && $char !== "\"" && $char !== '\\' && $ord >= 32 && $ord <= 126)
$return .= $char;
else
$return .= '\\x' . dechex($ord);
}
return $return;
}
关于php - 没有连接的多字节的mysql_real_escape_string?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4892882/