mysql响应中的波兰字符

时间:2013-03-09 17:36:04

标签: php mysql

我的波兰字符有问题。当它应该是“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);

?>

2 个答案:

答案 0 :(得分:2)

你必须确保你到处使用UTF-8:

  • 脚本文件编码(UTF-8而不是ANSI) - 您可以在Notepad ++中设置编码
  • html代码(meta charset)
  • 数据库表charset(当您创建表或数据库时)
  • 数据库mysql_set_charset('utf8', $connection_obj);
  • database 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。