从 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 表打印文本时的字符集问题的主要内容,如果未能解决你的问题,请参考以下文章