我在显示外国字符时遇到问题(带有重音的字符如:éàùç等)
数据库中的行是这样的:
Name | Datatype | Charset
title | varchar(255) | utf8_general_ci
我这样存储:
function inputFilter($var)
{
$var = trim(htmlentities(strip_tags($var)));
if (get_magic_quotes_gpc())
$var = stripslashes($var);
$var = mysql_real_escape_string($var);
return $var;
}
$title = inputFilter($_POST['title']);
我按照这样打印:
print $getfromdb['title'];
这是打印出来的方式:
Português //Should be: Português
我尝试过添加: htmlspecialchars,utf8_decode / encode和htmlentities到印刷品,虽然没有任何帮助!
我已将此添加到标题中:
<meta charset="utf-8">
我做错了什么?
答案 0 :(得分:2)
要遵循的步骤:
使用UTF8的元标记。
<meta http-equiv="content-type" content="text/html; charset=utf-8" />
将PHP设置为使用UTF8。
mb_internal_encoding('UTF-8');
mb_http_output('UTF-8');
mb_http_input('UTF-8');
对于mysql,您希望将表转换为UTF8。
ALTER TABLE table_name CONVERT TO CHARACTER SET utf8 COLLATE utf8_general_ci
您也可以运行:
SET NAMES UTF8
作为建立连接后的第一个查询,它将您的数据库连接转换为UTF8。
答案 1 :(得分:2)
在您建立的每个连接后立即加入mysqli_set_charset($link, "utf8");
。这将有效。
答案 2 :(得分:1)
试试这个:
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<meta charset="UTF-8">
是HTML 5(而且,BTW,UTF-8
是大写的)
由于您的测试链看起来也涉及表单(因为$_POST
),您必须确保为表单设置了UTF-8字符集。
答案 3 :(得分:1)
在查询/插入数据库之前使用SET NAMES utf8
query("SET NAMES utf8");
答案 4 :(得分:0)
您应该将字符编码用作ISO-8859-1
而不是UTF-8
,如下所示:
<meta charset="ISO-8859-1">
您尝试显示的字符为拉丁和UTF-8
,即 UNICODE 编码无法解释拉丁字符。
<强> Reference 强>
如果是mysql,你应该使用latin1
charset。