Phi*_*une 12 php special-characters htmlspecialchars
我已经多次看过这个问题了,但没有很好的分辨率.我有以下字符串:
$string = "<p>Résumé</p>";
Run Code Online (Sandbox Code Playgroud)
我想打印或回显字符串,但输出将返回<p>R?sum?</p>.所以我尝试htmlspecialchars()或者htmlentities()哪些输出<p>Résumé<p>和浏览器呈现<p>Résumé<p>.显然,我希望它能够呈现:
恢复
而且我使用的是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)
这将正确打印: àè
我现在有一点了解.这样做的原因是客户端(浏览器)通过响应被告知header()期望ISO-8859-1文本/ html文件.(正如其他人提到的那样,您也可以通过更新.ini或.htaccess文件来完成此操作.)然后,一旦浏览器开始将该给定文件解析为DOM,输出将遵循任何<meta charset="">规则,但保持您的ISO字符.
PHP中有一个非常好的函数utf8_encode()来解决这个问题。
\n\necho 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\nRun Code Online (Sandbox Code Playgroud)\n\n\n
| 归档时间: |
|
| 查看次数: |
91415 次 |
| 最近记录: |