如何将HTML实体转换为它们的字符等价物?

时间:2011-02-02 22:58:52

标签: php character-encoding special-characters

我正在创建一个要保存在本地用户计算机上的文件(不在Web浏览器中呈现)。

我目前正在使用html_entity_decode,但这不会转换像–这样的字符(这是n-dash),并且想知道我应该使用的其他功能。

例如,当文件导入软件时,而不是ndash或只是 - 它显示为–。我知道我可以使用str_replace,但是如果它发生在这个角色上,那么由于数据是动态的,它可能会与许多其他角色一起发生。

5 个答案:

答案 0 :(得分:32)

您需要定义目标字符集。 –不是默认ISO-8859-1字符集中的有效字符,因此未解码。将UTF-8定义为输出字符集,它将解码:

echo html_entity_decode('–', ENT_NOQUOTES, 'UTF-8');

如果可能的话,你应该避免开始使用HTML实体。我不知道编码数据来自何处,但如果您将其存储在数据库或其他地方,那么您做错了。始终存储UTF-8编码的数据,仅转换为HTML实体,或者在必要时转义为输出。

答案 1 :(得分:17)

尝试mb_convert_encoding()

$string = "n–dash";
$output = mb_convert_encoding($string, 'UTF-8', 'HTML-ENTITIES');
echo $output;

答案 2 :(得分:1)

<强>更新

function decode_characters($data)
{
    $text = $data;
    $enc = mb_detect_encoding($text, "UTF-8,ISO-8859-1");
    $resutl_characters = iconv($enc, "UTF-8", $text);
    return $resutl_characters;
}

答案 3 :(得分:0)

使用utf8_encode()将文件编码为UTF-8。然后你不必更换/删除任何东西。

答案 4 :(得分:0)

您是否尝试将字符转换为HTML实体以便存储和以后检索?

htmlentities('–', ENT_COMPAT, 'UTF-8');
// Returns "&ndash;"

如果我误解了你的问题,请告诉我。