我已经多次看到这个问题,但没有得到很好的解决。我有以下字符串:
$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 文件。现实世界的应用不仅仅是那一小行。
最佳答案
经过多次讨论后,我对这个问题有了更好的理解,我想向其他可能遇到此问题的人发布此问题。
虽然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 字符完整。
关于php - PHP中如何显示特殊字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12699037/