我将外语字符串存储在 utf8 中。在显示它们时,我希望它们以重音字符成为它们的 html 对应物的方式进行转换,例如é
变成é
但是,我用短语搜索,我能找到的只是htmlentities()
哪个不这样做。
我发现这是解决这个问题的一个非常简单的方法。
第一部分尝试对文本进行编码。如果 $output 返回一个空白字符串,则该值是 utf8 编码的,然后创建 html 实体。
$output = htmlentities($value, 0, "UTF-8");
if ($output == "") {
$output = htmlentities(utf8_encode($value), 0, "UTF-8");
}
例子:
Montréal
输出:
Montréal
确保在调用时正确指定了编码htmlentities()
。
文档显示它默认为'UTF-8'
,但如果您进一步阅读,您会发现这是 PHP 5.4 的新内容。如果您使用的是旧版本,则默认值实际上是'ISO-8859-1'
,并且您需要确保明确指定它'UTF-8'
而不是依赖默认行为。
htmlentities($string, 0, 'UTF-8');
这是作为对另一个答案的评论发布的,但这正是我所需要的,所以我将它作为自己的答案发布:
在某些情况下,您想为重音字符(à、è、ì、ò、ù、...)生成实体,但又想保留 HTML 代码(因此不要省略“<”和“>”并避免转义已经转义实体。在这些情况下,您可以使用以下代码:
$string = str_replace(array("<", ">"), array("<", ">"), htmlentities($string, ENT_NOQUOTES, 'UTF-8', FALSE));
此代码与 PHP >= 5.2.3 兼容
(来源)