我想要转义我要在数据库中插入的所有字符串。但我的问题是,因为我有超过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}}格式化? (我希望这样!)
问候,谢谢!
答案 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格式发送内容(按表单)。