PHP使用重音转换外来字符

Dev*_*man 3 php compare html-encode diacritics

嗨我正在尝试将一些文本与数据库中的文本进行比较..在数据库中,当我将数据库文本与我的字符串进行比较时,任何带有重音的文本都会像html一样编码(即.é)因为我的字符串只显示é..当我使用php函数htmlentities对字符串进行编码时,é变成了we怪异的?使用htmlspecialchars根本不编码é..

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

Emi*_*röm 13

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

$encoded = htmlentities($text, ENT_COMPAT, 'UTF-8');
Run Code Online (Sandbox Code Playgroud)

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

$encoded = htmlentities(utf8_decode($text));
Run Code Online (Sandbox Code Playgroud)

  • @Devin,`ENT_COMPAT`是`htmlentities`第二个参数的默认值.从技术上讲,您可以将其设置为null,或者您可以将其设置为[`htmlentities`](http://us.php.net/manual/en/function.htmlentities.php)页面上的其他3个值之一 (2认同)

kah*_*aha 5

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

function convert_accent($string)
{
    return htmlspecialchars_decode(htmlentities(utf8_decode($string)));
}
Run Code Online (Sandbox Code Playgroud)

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

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

mysql_query("SET NAMES `utf8`");
Run Code Online (Sandbox Code Playgroud)

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