PHP使用重音转换外来字符

时间:2011-04-25 19:48:34

标签: php compare diacritics html-encode

您好我正在尝试将某些文本与数据库中的文本进行比较..在数据库中,当我将数据库文本与我的字符串进行比较时,任何带有重音的文本都会像html(即。& eacute;)一样进行编码它不匹配,因为我的字符串只是显示é..当我使用php函数htmlentities来编码字符串首先é变成é怪异?使用htmlspecialchars不会对é进行编码..

您如何建议我将é与é以及所有其他重音字符进行比较?

5 个答案:

答案 0 :(得分:13)

您需要将正确的字符集发送给htmlentities。看起来您使用的是UTF-8,但默认为ISO-8859-1。改变它:

$encoded = htmlentities($text, ENT_COMPAT, 'UTF-8');

另一个解决方案是在编码之前将文本转换为ISO-8859-1,但这可能会破坏信息(ISO-8859-1不包含与UTF-8一样多的字符)。如果您想尝试这样做,请执行以下操作:

$encoded = htmlentities(utf8_decode($text));

答案 1 :(得分:5)

我在法国网站上工作,我也有同样的问题。这是我使用的功能。

function convert_accent($string)
{
    return htmlspecialchars_decode(htmlentities(utf8_decode($string)));
}

它将你的字符串解码为utf8,而不是转换所有HTML实体。甚至标签。但我们希望将标签转换回正常,而htmlspecialchars_decode会将它们转换回来。因此,最后您将获得一个带有转换口音的字符串,而不会触及标签。 您可以在将电子邮件内容发送给配方之前使用此功能。

您可能面临的另一个问题是,有时使用此功能,数据库中的内容会转换为? 。在这种情况下,您应该在运行查询之前执行此操作:

mysql_query("SET NAMES `utf8`");

但您可能需要这样做,这取决于您表中的编码。我希望它有所帮助。

答案 2 :(得分:2)

最近遇到类似的问题。跟随Emil的回答,它在本地运行良好,但不适用于我们的开发/舞台环境。我最终使用了它,它可以解决所有问题:

$title = html_entity_decode(utf8_decode($item));

感谢您带领我朝着正确的方向前进!

答案 3 :(得分:1)

比较任务与您在创建数据库或表时选择的字符集和排序规则有关。如果你要保存带有很多口音的字符串,比如西班牙语,我建议你使用charset uft8,校对可能对你正在使用的语言(英语,法语或其他)更准确。

在数据库中使用正确字符集的最好方法是,您可以以自然的方式保存字符串,例如:我的名字我可以将其存储为“MarioJuárez”,我不需要做一些奇怪的转换。< / p>

答案 4 :(得分:1)

简单地使用它可以用于挪威字符:

function convert_accent($string)
{
    return htmlspecialchars(utf8_decode($string));
}