我已经多次看到这个问题,但是分辨率不高。我有以下字符串:
$string = "<p>Résumé</p>";
我想打印或回显字符串,但是输出将返回<p>R�sum�</p>。所以我尝试htmlspecialchars()或htmlentities()哪个输出<p>Résumé<p>和浏览器渲染<p>Résumé<p>。很明显,我想要它呈现此:
<p>R�sum�</p>
htmlspecialchars()
htmlentities()
<p>Résumé<p>
恢复
我正在使用UTF-8:
header("Content-type: text/html; charset=UTF-8");
我在这里想念什么?为什么echo和print输出�的任何特殊字符?为了澄清,该字符串实际上是存储在数据库中的整个HTML文件。现实世界中的应用程序不只是那条小线。
echo
print
�
经过多次激烈的讨论后,我对我想发布给可能遇到此问题的其他人的问题有了更好的了解。
虽然UTF-8字符集将在客户端上显示特殊字符,服务器,在另一方面,可能不那么包容和将打印特殊字符,例如à和è如�和�。
à
è
为了确保您的服务器可以正确打印它们,请使用ISO-8859-1字符集:
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>
这将正确打印: àè
àè
我现在有了更好的理解。之所以起作用,是因为通过响应告知客户端(浏览器)header()需要一个ISO-8859-1text / html文件。(正如其他人所提到的,您也可以通过更新您的.ini或.htaccess文件来完成此操作。) 然后 ,一旦浏览器开始将给定文件解析为DOM,输出将遵循任何<meta charset="">规则,但保持ISO字符完整。
header()
.ini
.htaccess
<meta charset="">