php mysql特殊字符

时间:2012-05-23 14:18:10

标签: php mysql html

我的表看起来像这样 -

province_id int(11)                  
province_title char(200) utf8_general_ci 
parent int(8) int(2)

我已经从phpMyadmin直接插入了大量数据(而不是从php页面)。但是当我检索这些数据并在php页面中显示它们时,就会出现特殊字符的问题。

像 -

Québec shows -  Qu�bec.

我的html标题看起来像 -

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />

我认为插入数据时可能会发生问题。我怎样才能在phpmyadmin中转换这些数据?有什么帮助吗?

4 个答案:

答案 0 :(得分:4)

好像你没有在任何地方使用utf-8 所以你的数据在某些时候搞砸了。根据您正在做什么,您将不得不更改/添加以下一个或多个点(很可能是您忘记的SET CHARSET / mysql_set_charset):

  • 告诉MySQL使用utf-8。为此,请将此添加到my.cnf:

    collation_server = utf8_unicode_ci
    character_set_server = utf8
    
  • 在与mysql交互之前,发送这两个查询:

    SET NAMES 'utf8';
    CHARSET 'utf8';
    

    或者,让php在打开连接后执行此操作:

    mysql_set_charset('utf8', $conn); // when using the mysql_-functions
    mysqli::set_charset('utf8') // when using mysqli
    
  • 将UTF-8设置为数据库的默认字符集

    CREATE DATABASE `my_db` DEFAULT CHARACTER SET 'utf8';
    
  • 对表格执行相同的操作:

    CREATE TABLE `my_table` (
      -- ...
    ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
    
  • 假设客户端是浏览器,请将您的内容作为utf-8和正确的标头提供:

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

    要确定浏览器能够理解,请添加元标记:

    <meta http-equiv="Content-type" content="text/html; charset=utf-8" />
    
  • 最后但并非最不重要的是,告诉浏览器使用utf-8提交表单

    <form accept-charset="utf-8" ...>
    

答案 1 :(得分:0)

问题可能是您与MySQL连接的字符集。请参阅mysql_set_charsetmysqli::set_charset

答案 2 :(得分:0)

默认情况下,MySQL服务器未配置为期望UTF-8编码。

所以你必须使用

打开连接
mysql_query("SET NAMES utf8");   

如果您使用的是PDO,

$options = array(
    PDO::MYSQL_ATTR_INIT_COMMAND => 'SET NAMES utf8',
); 

$dbh = new PDO($dsn, $username, $password, $options);

答案 3 :(得分:0)

如果在phpmyadmin中看到数据时看起来没问题,问题可能出在文件本身的文本中。

使用Eclipse(编辑»设置编码)或Notepad ++(编码)确认您在文件中拥有正确的编码。