2013-09-23 93 views
1

为什么当我从数据库中读取西里尔文字是好的,但是当我把在选择选项菜单这段文字我得到了奇怪的符号cyrillized话从数据库和PHP读取

http://prikachi.com/images/813/6589813g.jpg http://prikachi.com/images/811/6589811I.jpg

我想,我把到处是utf-8,但我不知道...

在我的HTML

我用:

<meta http-equiv="Content-Type" content="text/html; charset=utf-8"> 
+0

检查什么样的目标表中的字段,您存储所有的字符串也有如下归类:\t utf8_general_ci –

+0

这里是由cherset造成的问题来无论是在数据库中插入数据(应该是UTF-8 - 通用)和连接到数据库时设置的字符集。 MySQLi,PDO和mysql_ *都有连接时设置默认字符集的功能 –

+0

另外,在执行任何查询之前,请尝试执行以下操作之一:SET NAMES utf8 –

回答

2

很可能你没有使用相同的字符集(utf-8)无处不在因此你的数据在某个时刻会被搞乱。这取决于你在做什么,你就必须更改/添加以下点中的一个或多个(也许这是SET CHARSET/mysql_set_charset你忘了):

  • 告诉MySQL使用UTF-8。要做到这一点,把它添加到你的我的。CNF:

    collation_server = utf8_unicode_ci 
    character_set_server = utf8 
    
  • 与MySQL进行交互前,送出这两querys:

    ​​3210

    ,或者让打开连接后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和t的形式提供您的内容他正确的标题:

    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

这看起来非常彻底 – allen213

+0

很多,我真的错过了其中的一些 –

+0

mysqli :: set_charset('utf8')<<<不是先加载预设的字符集,然后一旦建立连接,它会加载utf8字符集?在那种情况下,这将是一个性能问题。那么charset的根源是什么?我在哪里可以永远改变它,而无需为每个连接调整它? – henk