MySQL真正的逃脱 - 自己的逃避 - o到ö?

时间:2017-04-16 20:57:27

标签: php mysql string escaping mysql-real-escape-string

我想要转义我要在数据库中插入的所有字符串。但我的问题是,因为我有超过10.000个字符串要检查,数据库查询会太多了......

所以我使用这个转义函数,我在stackoverflow.com中找到它:

function escape($value) {
    $return = '';
    for($i = 0; $i < strlen($value); ++$i) {
        $char = $value[$i];
        $ord = ord($char);
        if($char !== "'" && $char !== "\"" && $char !== '\\' && $ord >= 32 && $ord <= 126)
            $return .= $char;
        else
            $return .= '\\x' . dechex($ord);
    }
    return $return;
}

它正在运作。但我的问题是,我没有任何öä或类似的字符......

在我调用此函数之前,我有一个这样的字符串:Königsedition,在我调用此函数后,我应该得到K\xc3\x83\xc2\xb6nigsedition。但问题是,由于某些原因,我在我的数据库中得到Kxc3xb6nigsedition ...

如何将其转回Königsedition

,是否还有另一种方法来转义字符串,而不使用SQL实数转义函数,因为那时我必须超过10.000个SQL查询,以转义字符串并保留{ {1}}格式化? (我希望这样!)

问候,谢谢!

1 个答案:

答案 0 :(得分:2)

您不必“逃避”字符串的编码。确保表,连接和输入都具有相同的编码(如UTF-8)。

对于你的表格,确保列(最好是表格本身)具有utf8_general_ci校对。

如果您使用PDO,请将;charset:utf8添加到DSN,或者如果您不使用PDO,请在运行其他查询之前执行查询SET NAMES utf8。带有charset的DSN示例为mysql:host=HOSTNAME;dbname=DATABASE;charset=utf8

确保您的网页具有UTF-8编码,为HTML网页发送Content-Type标头Content-Type: text/html; charset=utf-8,以便浏览器以UTF-8格式发送内容(按表单)。