Joc*_*ung 1 php mysql encoding internet-explorer utf-8
我的测试代码有这个URL:http://www.gruppenunterkuenfte.de/encodingtest.php?q =köln
它将查询参数q传递给SQL查询.
奇怪的是,如果查询来自IE,我必须这样utf8_encode()做.如果它来自Chrome或Firefox,我可能不会.
mb_detect_encoding()总是说查询是UTF-8(IE和其他).但是查询itselfe只能在其中一个浏览器中使用.
这是我上面的URL中的测试代码:
<?php
header('Content-Type: text/html; charset=utf-8');
$config = parse_ini_file("inc/base/config.php", 1);
$link = mysqli_connect($config["database"]["server"], $config["database"]["user"], $config["database"]["passwd"]);
mysqli_select_db($link, $config["database"]["database"]);
mysqli_query($link, "SET NAMES utf8;");
echo 'mb_detect_encoding: '. mb_detect_encoding($_GET['q']) .'<br>';
echo 'Without utf8_encode():<br>';
$res = mysqli_query($link, 'SELECT SQL_CALC_FOUND_ROWS ort FROM BRDOrte
WHERE ort LIKE \''. addslashes($_GET['q']) .'%\'
GROUP BY BINARY ort
ORDER BY BINARY ort
LIMIT 5
');
while ($row = mysqli_fetch_array($res)) print_r($row);
echo '<br>With utf8_encode():<br>';
$res = mysqli_query($link, 'SELECT SQL_CALC_FOUND_ROWS ort FROM BRDOrte
WHERE ort LIKE \''. utf8_encode(addslashes($_GET['q'])) .'%\'
GROUP BY BINARY ort
ORDER BY BINARY ort
LIMIT 5
');
while ($row = mysqli_fetch_array($res)) print_r($row);
?>
Run Code Online (Sandbox Code Playgroud)
MySQL表及其所有字段都是utf8_general_ci.
那么如何告诉IE将Query参数发送为UTF-8?
或者我如何在服务器端检测它,所以我可以正确编码?
URI的通用语法(RFC3986)要求对非7位ASCII的任何字符进行百分比编码(URI编码).当您在该标准之外操作时,用户代理处理将不可预测地变化.您将要么a)在使用javascript发送之前对URL字符串进行编码(请参阅encodeURIComponent),b)在使用PHP进行页面呈现期间对其进行编码(请参阅urlencode),或者c)在请求处理程序中创建一个三元语句来处理情况:
$tag = strlen($_GET['q']) > 1 ? $_GET['q'] : utf8_encode($_GET['q']);
Run Code Online (Sandbox Code Playgroud)