从 db 表打印文本时的字符集问题

Posted

技术标签:

【中文标题】从 db 表打印文本时的字符集问题【英文标题】:charset issues in printing text from db table 【发布时间】:2011-12-02 20:26:57 【问题描述】:

我有一个用字符集 utf8_general_ci 定义的数据库和一个表,该表应该存储从具有相同字符集的文本区域表单中插入的一些文本。

我用来获取文本的表单是这样的:

<form action="submit_text.php" method="post">

    Text:</br>
    <textarea name="text" cols="109" rows="20">
        <?php echohtmlspecialchars($_POST['text']);?>
    </textarea>

    <input name="submit" type="submit" value="save text">

</form>

我用来将此文本保存在我的数据库中的 php 指令如下:

$text = $_POST['text'];
$query = "INSERT INTO table_name VALUES (..., '$text', ...)";
$query_result = mysql_query($query) or die (mysql_error());
return $query_result;

然后我有一个页面,我通过选择表的一个元素然后回显查询结果的文本字段(不显示查询部分)来打印保存在数据库表中的文本:

<div class="entry">
    <?php echo $selected_element_of_table['text'];?>
</div>

但是,文本中的所有特殊字符都搞砸了,换行符或制表符都不能正确打印。

有人知道我的问题是什么吗? 我应该更改字符集编码吗?

提前致谢!

【问题讨论】:

【参考方案1】:

有几件事可以尝试:

在将显示UTF-8 content 的页面中,您的标题中包括:

<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />

在您的 PHP 中,在任何输出到浏览器之前,包括 content type PHP header:

header ('Content-type: text/html; charset=utf-8');

在运行 SQL 以获取内容之前,请使用 mysql_set_charset:

mysql_set_charset('utf8',$link); 
// $link is optional, refers to your DB connection

如果您希望输出换行符/回车符,请将输出文本包装在 nl2br($output) 中

【讨论】:

标签我已经在使用它,我会尝试其他解决方案 最好实现以上所有,仅元标记不会提供修复 nl2br($output) 这是正确的答案。解决了我的问题。非常感谢!

以上是关于从 db 表打印文本时的字符集问题的主要内容,如果未能解决你的问题,请参考以下文章

如何在 C 中使用参数从文本文件中打印字符?

如何在 DOS 中打印彩色字符串?

从命令提示符打印目录到文本文件时缺少特殊字符

程序未从文本文件 c++ 中打印出字符串

如何从单个文本文件中同时打印字符串和整数?

使用ajax从mysql DB检索和打印数据到文本框(如何在同一个php页面中使用它两次)