数据库和网站中的不同编码集

时间:2013-11-03 13:27:47

标签: database utf-8 character-encoding

我的网站有非常简单的新闻系统(发布,编辑,删除等)。我的所有html页面都以UTF-8格式保存,一切都正确显示。

我指定在每个标头中使用UTF:     

为了将新闻保存到数据库,我使用简单的脚本(所有值来自html表单):

   $newsTitel   = isset($_POST['title']) ? $_POST['title'] : 'Untitled';
   $submitDate  = $date = date('Y/m/d');
   $content = isset($_POST['newstext']) ? $_POST['newstext'] : 'No content';

   include 'includes/dbconnect.php';

   mysql_query("SET CHARACTER SET utf8");
   mysql_query("SET NAMES 'utf8'"); 
   $query = mysql_query("INSERT INTO news SET date='$submitDate',subject='$newsTitel',news='$content'");

数据以奇怪的格式(编码)保存到数据库中。有像Ã<Ä等字符使内容几乎不可读。其他问题是,当将此内容加载回html表单(用于编辑新闻)时,它会显示在这个奇怪的编码中。当我查看我使用的数据库的规范时,它说它以UTF-8保存数据。

我使用phpMyAdmin访问MYSQL数据库。

总结一下: 保存在UTF8中的页面,都有正确的标题 数据库:与服务器的交互:utf8_czech_ci,格式相同的表格

我完全不懂的是这个奇怪的事情: 1)我使用上面的脚本将数据保存到数据库中 2)我看看phpMyAdmin并看到破碎的编码 3)我将数据加载回我的网站并使用以下内容显示:

<?php
        include 'includes/dbconnect.php';
        $data = mysql_query("SELECT * FROM news ORDER BY id DESC limit 20") or die(mysql_error()); 

        while($info = mysql_fetch_array( $data )) 
        {
            echo '<article><h3> '.$info['subject'].'</h3><div id="date">'.$info['date'].'</div>';
            echo '<p>'.$info['news']. '</p></article>';
        } 
 ?>

编码正确,不会显示任何奇怪的字符。

4)我将完全相同的数据加载到html表单中(出于编辑目的),并查看与数据库中相同的损坏编码。

发生什么事了?我真的不明白。我尝试通过重新保存utf8中的所有内容,更改表格并将其编码更改为不同的utf8版本等来解决这个问题......

这是我传递给数据库的数据示例(它是带有html标签的捷克语):

<p>Vařila myšička kašičku</p>
<img src="someImage.jpg">
<p>Další text</p>

感谢您的帮助......

2 个答案:

答案 0 :(得分:2)

指定字符集的命令应为:

set names 'utf8';

如果您目前检查查询返回的结果,它会说什么?如果我在显示器中尝试它,我会得到以下结果:

mysql> set names 'UTF-8';
ERROR 1115 (42000): Unknown character set: 'UTF-8'

在连接set names 'utf8'之前,您是否尝试过使用SELECT?你输出的字符输出让我觉得你正在为UTF-8找回正确的字节,但它们被解释为ISO-8859-1。

答案 1 :(得分:0)

你没有逃避单引号或其他一些html字符。 使用mysql_real_escape_string。

$newsTitel   = isset($_POST['title']) ? mysql_real_escape_string($_POST['title']) : 'Untitled';