首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >数据库和网站中的不同编码集

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

Stack Overflow用户
提问于 2013-11-03 13:27:46
回答 2查看 67关注 0票数 1

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

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

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

代码语言:javascript
复制
   $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)我将数据加载回我的网站并使用以下方式显示:

代码语言:javascript
复制
<?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标记的捷克语):

代码语言:javascript
复制
<p>Vařila myšička kašičku</p>
<img src="someImage.jpg">
<p>Další text</p>

谢谢你的帮助..。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-12-07 15:59:34

指定字符集的命令应该是:

代码语言:javascript
复制
set names 'utf8';

如果您现在检查从查询中返回的结果,它会说什么?如果我在显示器上试一试,就会得到以下结果:

代码语言:javascript
复制
mysql> set names 'UTF-8';
ERROR 1115 (42000): Unknown character set: 'UTF-8'

在连接到set names 'utf8'之前,您也尝试过使用SELECT吗?您说的字符是输出的,这使我认为您正在返回UTF-8的正确字节,但它们被解释为ISO-8859-1。

票数 2
EN

Stack Overflow用户

发布于 2013-11-03 13:30:19

您不能转义单引号或其他html字符。使用mysql_real_escape_string。

代码语言:javascript
复制
$newsTitel   = isset($_POST['title']) ? mysql_real_escape_string($_POST['title']) : 'Untitled';
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/19753448

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档