我在显示外语字符时遇到问题(带有重音符号的字符,例如:é à ù ç 等)
数据库中的行如下所示:
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和html实体打印,尽管没有任何帮助!
我已将其添加到标题中:
<meta charset="utf-8">
我做错了什么?
要遵循的步骤:
使用 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。
在您
建立的每个连接后立即包含mysqli_set_charset($link, "utf8");
。这将起作用。
试试这个:
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<meta charset="UTF-8">
是HTML 5(顺便说一句,UTF-8
是大写的)
看起来您的测试链也涉及表单(由于$_POST
),因此您必须确保也为表单设置了 UTF-8 字符集。
在查询/插入数据库之前使用SET NAMES utf8
query("SET NAMES utf8");
应按ISO-8859-1
使用字符编码,而不是按如下方式使用字符编码UTF-8
:
<meta charset="ISO-8859-1">
您尝试显示的字符是拉丁语和UTF-8
即UNICODE编码无法解释拉丁字符。
参考
在mysql的情况下,你应该使用latin1
字符集。