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