PHP/外语字符


php/foreign characters

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

数据库中的行如下所示:

    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-8UNICODE编码无法解释拉丁字符。

参考

在mysql的情况下,你应该使用latin1字符集。