我在php脚本中遇到mysql bd的查询字符集问题。
我将GET
参数放在select
查询中,它适用于所有拉丁字符,但使用西里尔字符时,它会返回空表。如果我在查询中使用Cyrillic而不是GET
参数放置一些值,则查询可以按我的方式工作。同样,我在php-Admin中获得了结果查询,但它确实有效。
结果中的所有西里尔字符都显示我是正确的。
我已检查过所有内容:php-file为utf8
,GET
参数值为utf8
,mysql_client_encoding()
返回utf8
。
我已经尝试了所有我找到的东西 - 没有什么可以帮助我。
header('Content-type:text/html; charset=utf-8');
mysql_set_charset('utf8', $link);
mysql_query("SET NAMES utf8", $link);
mysql_query("SET CHARACTER SET 'utf8'", $link);
mysql_query("SET SESSION collation_connection = 'utf8_general_ci'", $link);
mysql_query("SET character_set_results = 'utf8', character_set_client = 'utf8', character_set_connection = 'utf8', character_set_database = 'utf8', character_set_server = 'utf8'", $link);
所有这些无法帮助。
这是我的php脚本。
<?php
$link = mysql_connect('localhost', 'r96036lg_searche', 'Jh1ZT4]^');
//mysql_set_charset('utf8', $link);
//mysql_query("SET NAMES utf8", $link);
//mysql_query("SET CHARACTER SET 'utf8'", $link);
//mysql_query("SET SESSION collation_connection = 'utf8_general_ci'", $link);
mysql_query("SET character_set_results = 'utf8', character_set_client = 'utf8', character_set_connection = 'utf8', character_set_database = 'utf8', character_set_server = 'utf8'", $link);
//echo mysql_client_encoding($link);
mysql_select_db('r96036lg_searche', $link);
//mysqli::set_charset('utf8');
$query = "select id, name, typeid from MainObjects where used = 1";
if(isset($_GET['name']) && !empty($_GET['name'])) {
//$name = mb_convert_encoding($_GET['name'], "UTF-8", "win1251");
$name = $_GET['name'];
//echo mb_detect_encoding($name, "auto", false);
//$name = iconv(mb_detect_encoding($name, "auto", false), "UTF-8", $name);
//echo $name;
$query .= " and typeid = 1 and (name like '%".$name.
"%' or id in (select parentid from MainObjects where name like '%"
.$name."%' and used = 1))";
}
//echo $query;
$result = mysql_query($query, $link);
if(!$result) echo mysql_error();
else {
$out = "[";
while($row = mysql_fetch_row($result)) {
... //here is myoutput
}
$out .= "]";
echo $out;
}
?>
答案 0 :(得分:1)
这是你应该怎么做的。它不会解决caracter编码问题,但它将有助于reste。 (甚至可能解决你的问题,因为它可能与不逃避价值有关。)
$query = "select id, name, typeid from MainObjects where used = 1";
if(isset($_GET['name']) && !empty($_GET['name'])) {
$name = mysql_real_escape_string($_GET['name']);
$query .= " and typeid = 1 and (name like '%".$name.
"%' or id in (select parentid from MainObjects where name like '%"
.$name."%' and used = 1))";
}
//echo $query;
$result = mysql_query($query, $link);
我这没有帮助在某处出现字符编码不匹配。有三点:
example.com/index.php?name=%d0%ba
(西里尔文小写字母ka)