一尘不染

如何在PHP中显示特殊字符

php

我已经多次看到这个问题,但是分辨率不高。我有以下字符串:

$string = "<p>Résumé</p>";

我想打印或回显字符串,但是输出将返回<p>R�sum�</p>。所以我尝试htmlspecialchars()htmlentities()哪个输出&lt;p&gt;R&eacute;sum&eacute;&lt;p&gt;和浏览器渲染&lt;p&gt;R&eacute;sum&eacute;&lt;p&gt;。很明显,我想要它呈现此:

恢复

我正在使用UTF-8:

header("Content-type: text/html; charset=UTF-8");

我在这里想念什么?为什么echoprint输出的任何特殊字符?为了澄清,该字符串实际上是存储在数据库中的整个HTML文件。现实世界中的应用程序不只是那条小线。


阅读 642

收藏
2020-05-29

共1个答案

一尘不染

经过多次激烈的讨论后,我对我想发布给可能遇到此问题的其他人的问题有了更好的了解。

虽然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-1text /
html文件。(正如其他人所提到的,您也可以通过更新您的.ini.htaccess文件来完成此操作。) 然后
,一旦浏览器开始将给定文件解析为DOM,输出将遵循任何<meta charset="">规则,但保持ISO字符完整。

2020-05-29