我的波兰字符有问题。当它应该是“Kraków”时,我无法得到正确的文字,比如'?ukasz'而不是“Łukasz”甚至是“null”。我在mysql_connect或iconv(在json_encode($ output)之后)尝试了“mysql_set_charset('utf-8'/'iso-8859-1')”并且它仍然是相同的(除了现在有“Krak \ u00f3”而不是“空值”)。我会感激任何帮助。
这是我的Android应用的php文件:
$id_client = $_REQUEST['id_klienta'];
$con=mysql_connect('localhost', 'root', '') or die(mysql_error());
mysql_select_db('courier_helper') or die(mysql_error());
$sql=mysql_query("SELECT * FROM `clients` WHERE id_klienta='$id_client'");
while($r=mysql_fetch_assoc($sql))
$output[]=$r;
print(json_encode($output));
mysql_close($con);
?>
答案 0 :(得分:2)
你必须确保你到处使用UTF-8:
mysql_set_charset('utf8', $connection_obj);
SET NAMES utf8
- 连接后运行该SQL命令还有一件事 - 熟悉PDO。这是我使用的PDO连接功能:
function DbConnect()
{
$db_host = "localhost";
$db_name = "database_name";
$db_user = "your_username";
$db_pass = "your_passwd";
$link = new PDO("mysql:host=$db_host;dbname=$db_name; charset=UTF-8", $db_user, $db_pass);
$link->exec("set names utf8;");
return $link;
}
您可以像这样使用该功能(这是PDO示例):
$link = DbConnect();
$query = $link->prepare("SELECT id FROM wp_users");
$query->execute();
$result = $query->fetchAll(PDO::FETCH_ASSOC);
答案 1 :(得分:1)
您应该让数据库将数据存储为UTF8,这意味着转换现有表格。
ALTER TABLE tablename CONVERT TO CHARACTER SET utf8 COLLATE utf8_general_ci;
您还需要确保与数据库的连接是UTF8。您可以通过在连接后立即运行SET NAMES查询来确保这一点。
SET NAMES UTF8
正如其他人提到的,你应该开始使用PDO。