我已经看到这个问题问了好几次,但都没有一个好的解决方案。我有以下字符串:
$string = "<p>Résumé</p>";
我想打印或回显字符串,但输出将返回<p>R�sum�</p>
。因此,我尝试使用htmlspecialchars()
或htmlentities()
,它输出<p>Résumé<p>
,浏览器呈现<p>Résumé<p>
。很明显,我想要它来呈现这个:
Résumé
我使用的是UTF-8:
header("Content-type: text/html; charset=UTF-8");
这里我漏掉了什么?为什么echo
和print
会为任何特殊字符输出一个�
?为澄清起见,该字符串实际上是存储在数据库中的整个HTML文件。现实世界中的应用程序不只是这一小行。
发布于 2012-10-08 22:55:03
经过多次面对面的讨论,我对这个问题有了更好的理解,我想把这个问题发布给其他可能有这个问题的人。
虽然UTF-8字符集将在客户机上显示特殊字符,但另一方面,服务器可能不是很好用,它会将特殊字符(如à
和è
)打印为�
和�
。
要确保您的服务器能够正确打印它们,请使用ISO-8859-1
字符集:
<?php
/*Just for your server-side code*/
header('Content-Type: text/html; charset=ISO-8859-1');
?>
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8"><!-- Your HTML file can still use UTF-8-->
<title>Untitled Document</title>
</head>
<body>
<?= "àè" ?>
</body>
</html>
这将正确打印:àè
编辑(4年后):
我现在对此有了更好的理解。这样做的原因是,通过响应header()
,客户端(浏览器)被告知需要一个ISO-8859-1
文本/html文件。(正如其他人所提到的,您也可以通过更新.ini
或.htaccess
文件来完成此操作。)然后,一旦浏览器开始将给定的文件解析成DOM,输出将遵循任何<meta charset="">
规则,但保持您的ISO字符不变。
发布于 2018-05-07 16:03:12
在PHP中,有一个非常好的函数utf8_encode()可以解决这个问题。
echo utf8_encode("Résumé");
//will output Résumé instead of R�sum�
发布于 2012-10-03 06:14:52
您可以在PHP文件中混合使用PHP和HTML ...就做这样的事...
<?php
$string = htmlentities("Résumé");
?>
<html>
<head></head>
<body>
<p><?= $string ?></p>
</body>
</html>
这应该会按照您想要的方式输出Résumé
。
如果未启用短标签,请将<?= $string ?>
替换为<?php echo $string; ?>
https://stackoverflow.com/questions/12699037
复制相似问题