Php mysql\u real\u escape\u无连接多字节字符串? 让我考虑一下,我会一直做< /P> SET NAMES 'utf8'
到mysql连接(所以我需要多字节转义) 是否有一个安全的替代mysql\u real\u escape\u字符串,它不需要mysql连接 在官方页面中,我发现一个使用str_replace的页面,如下所示:Php mysql\u real\u escape\u无连接多字节字符串? 让我考虑一下,我会一直做< /P> SET NAMES 'utf8',php,mysql,escaping,Php,Mysql,Escaping,到mysql连接(所以我需要多字节转义) 是否有一个安全的替代mysql\u real\u escape\u字符串,它不需要mysql连接 在官方页面中,我发现一个使用str_replace的页面,如下所示: if(!empty($inp) && is_string($inp)) { return str_replace(array('\\', "\0", "\n", "\r", "'", '"', "\x1a"), arr
if(!empty($inp) && is_string($inp)) {
return str_replace(array('\\', "\0", "\n", "\r", "'", '"', "\x1a"),
array('\\\\', '\\0', '\\n', '\\r', "\\'", '\\"', '\\Z') , $inp);
}
这够了吗
为什么mysql_real_escape_字符串需要当前charcaterset,如果它只转义相同的值呢?(如官方页面php.net/mysql\u real\u escape\u string中所述)
谢谢有一个问题与您的问题类似:
您应该使用mysql\u real\u escape\u字符串。当你自己制作一个过滤器时,你总是有机会让黑客找到解决办法。另一方面,Mysql\u real\u escape\u字符串总是最新的。如果这是你的意思的话,那么建立mysql连接就没什么大不了的了。我的大多数网站在每次浏览页面时都会建立连接,并且它们仍在工作;) 首先,有很多数据库抽象库 (我以前使用过dbFacile:) 另外,sql预编译语句总是一个好主意 但对于你的实际问题 从本帖: 我真的认为这是一个很好的选择:
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;
}
公共函数转义($string){
$return='';
对于($i=0;$i 如果($char!==“'”&&&$char!=“\”“&&&$char!='\\'&&$ord>=32&&$ordmysql\u real\u escape\u string()
考虑到字符集-如果其他开发人员在您身上切换了字符集怎么办?那么您有一个漏洞,可以通过使用可接受的转义函数轻松修复。您没有连接有什么原因吗?您仍然需要它来提交数据。@alex:我是这里唯一使用我的framework@alex:尽可能我知道,SET NAMES'utf8'
只用于当前连接,所以目前为止没有人能够更改字符集。@ZombieShooter如果有人用新字符集调用SET NAMES
怎么办?没有一个回答是好的。这甚至是一个不同的问题,因为我说过我将始终使用UTF-8字符集另一个问题不是这个问题。这个函数被复制到了一些问题中,但我不知道它是如何工作的。MySQL文档列出了一个表(9.1),其中列出了可以识别的反斜杠转义序列(),并明确指出在其他情况下反斜杠将被忽略,因此“\x”被解释为“x”。\xNN也是如此应该被解释为十六进制的序数字符吗?它肯定会变成“xNN”?