2014-03-19 236 views
0

我有一个简单的MySQL查询:PHP/MySQL的选择和特殊字符

$query = addslashes($_REQUEST['query']); 
$sql = mysql_query ("SELECT * FROM countries WHERE name LIKE '%{$query}%'"); 

它适用于任何$查询,除非它有它特殊字符。

假设我在寻找“奥兰群岛”或“科特迪瓦”,它不会找回任何东西。

我也尝试没有addslashes,但它只是不会改变任何东西。

谢谢你的帮助。

编辑

这是我的变量设置在MySQL:

character_set_client  | utf8  
character_set_connection | utf8      
character_set_database | utf8      
character_set_filesystem | binary      
character_set_results | utf8      
character_set_server  | latin1      
character_set_system  | utf8 

的字符集服务器是我无法改变。它似乎是由我的主机设置的。 任何尝试改变这一点都会给我一个信息,告诉我我没有超级权限允许我这样做。

+1

试试这个:-http ://stackoverflow.com/questions/18455406/how-to-extract-data-from-mysql-that-c​​ontains-special-characters或http://stackoverflow.com/questions/10578694/mysql-selecting-string-with -multi-special-characters在搜索时替换这些字符 – Divya

+2

请检查输入字符串和数据库编码是否为sa我(显然我建议UTF-8) –

+0

@洛伦佐马尔孔:我编辑了我的问题。这可能会给你一些额外的信息。 – Baylock

回答

1

使用的mysql_query后以下:

header('Content-type: text/html; charset=utf-8'); 
+0

我尝试过,但它不利于 – Baylock

0

我得到了答案,但这个问题不是我认为这是...

这不是本身的MySQL之一,但有关json_encode我用于输出MySQL结果。

所以,我不得不UTF8解码输入数据...

$query = utf8_decode($_REQUEST['query']); 

然后,我让我的MySQL查询,最后输出我的结果是这样的:

$response = array_map("utf8_encode", $response); 

echo json_encode ($response); 
+0

奇怪。但很高兴你想出了:) –