如何在PHP中显示特殊字符

Phi*_*une 12 php special-characters htmlspecialchars

我已经多次看过这个问题了,但没有很好的分辨率.我有以下字符串:

$string = "<p>Résumé</p>";
Run Code Online (Sandbox Code Playgroud)

我想打印或回显字符串,但输出将返回<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");
Run Code Online (Sandbox Code Playgroud)

我在这里错过了什么?为什么回声和打印输出?为任何特殊字符?为了澄清,字符串实际上是存储在数据库中的整个html文件.现实世界的应用不仅仅是一条小线.

Phi*_*une 37

经过多次敲击后,我对我想要为其他可能遇到此问题的人发布的问题有了更好的了解.

虽然UTF-8字符集将在客户端上显示特殊字符,服务器,在另一方面,可能不那么包容和将打印特殊字符,例如àè??.

为了确保您的服务器能够正确打印它们,我们使用ISO-8859-1charset:

<?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>
Run Code Online (Sandbox Code Playgroud)

这将正确打印: àè


编辑(4年后):

我现在有一点了解.这样做的原因是客户端(浏览器)通过响应被告知header()期望ISO-8859-1文本/ html文件.(正如其他人提到的那样,您也可以通过更新.ini.htaccess文件来完成此操作.)然后,一旦浏览器开始将该给定文件解析为DOM,输出将遵循任何<meta charset="">规则,但保持您的ISO字符.


Vik*_*ari 5

PHP中有一个非常好的函数utf8_encode()来解决这个问题。

\n\n
echo utf8_encode("R\xc3\xa9sum\xc3\xa9");\n\n//will output R\xc3\xa9sum\xc3\xa9 instead of R\xef\xbf\xbdsum\xef\xbf\xbd\n
Run Code Online (Sandbox Code Playgroud)\n\n

检查官方 PHP 页面。

\n