1

我有一个非常简单的新闻系统(发布、编辑、删除等)的网站。我所有的 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 数据库。

所以总结一下: Pages:以UTF8保存,都有正确的header 数据库:与服务器交互: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、alterign 表中并将它们的编码更改为不同的 utf8 版本等来解决这个问题......

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

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

谢谢你的帮助...

4

2 回答 2

2

The commands for specifying the character set should be:

set names 'utf8';

If you check the result returned from your queries at the moment, what does it say? If I try it in the monitor I get the following:

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

Have you tried using set names 'utf8' before connecting for the SELECT as well? The characters you're saying are output make me think you're getting back the correct bytes for UTF-8, but they're being interpreted as ISO-8859-1.

于 2013-12-07T15:59:34.530 回答
0

您没有转义单引号或其他一些 html 字符。使用 mysql_real_escape_string。

$newsTitel   = isset($_POST['title']) ? mysql_real_escape_string($_POST['title']) : 'Untitled';
于 2013-11-03T13:30:19.020 回答