Php mysql\u real\u escape\u无连接多字节字符串? 让我考虑一下,我会一直做< /P> SET NAMES 'utf8'

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

到mysql连接(所以我需要多字节转义)

是否有一个安全的替代mysql\u real\u escape\u字符串,它不需要mysql连接

在官方页面中,我发现一个使用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_字符串需要当前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&&$ord
mysql\u real\u escape\u string()
考虑到字符集-如果其他开发人员在您身上切换了字符集怎么办?那么您有一个漏洞,可以通过使用可接受的转义函数轻松修复。您没有连接有什么原因吗?您仍然需要它来提交数据。@alex:我是这里唯一使用我的framework@alex:尽可能我知道,
SET NAMES'utf8'
只用于当前连接,所以目前为止没有人能够更改字符集。@ZombieShooter如果有人用新字符集调用
SET NAMES
怎么办?没有一个回答是好的。这甚至是一个不同的问题,因为我说过我将始终使用UTF-8字符集另一个问题不是这个问题。这个函数被复制到了一些问题中,但我不知道它是如何工作的。MySQL文档列出了一个表(9.1),其中列出了可以识别的反斜杠转义序列(),并明确指出在其他情况下反斜杠将被忽略,因此“\x”被解释为“x”。\xNN也是如此应该被解释为十六进制的序数字符吗?它肯定会变成“xNN”?