我有一个非常简单的新闻系统网站(张贴,编辑,删除等)。我所有的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>谢谢你的帮助..。
发布于 2013-12-07 15:59:34
指定字符集的命令应该是:
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。
发布于 2013-11-03 13:30:19
您不能转义单引号或其他html字符。使用mysql_real_escape_string。
$newsTitel = isset($_POST['title']) ? mysql_real_escape_string($_POST['title']) : 'Untitled';https://stackoverflow.com/questions/19753448
复制相似问题