php / mysql - 外来字符

时间:2013-10-23 16:05:46

标签: php mysql

我在显示外国字符时遇到问题(带有重音的字符如:éàùç等)

数据库中的行是这样的:

    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">

我做错了什么?

5 个答案:

答案 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。