我已经多次看过这个问题,但没有很好的解决方案。我有以下字符串:
$string = "<p>Résumé</p>";
我想打印或回显字符串,但输出将返回<p>R�sum�</p>
。我尝试htmlspecialchars()
或htmlentities()
输出<p>Résumé<p>
,浏览器呈现<p>Résumé<p>
。显然,我希望这样做:
恢复
我正在使用UTF-8:
header("Content-type: text/html; charset=UTF-8");
我在这里缺少什么?为什么回声和打印输出�
任何特殊字符?为了澄清,字符串实际上是存储在数据库中的整个html文件。现实世界的应用不仅仅是一条小线。
答案 0 :(得分:35)
经过多次敲门之后,我对我想为其他可能遇到此问题的人发布的问题有了更深入的了解。
虽然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>
这将正确打印:àè
我现在有一点了解。这样做的原因是客户端(浏览器)通过响应header()
被告知期望ISO-8859-1
text / html文件。 (正如其他人所提到的,您也可以通过更新.ini
或.htaccess
文件来执行此操作。)然后,一旦浏览器开始将该给定文件解析为DOM,输出将遵循任何<meta charset="">
规则,但保持您的ISO字符。
答案 1 :(得分:2)
您可以在PHP文件中混合使用PHP和HTML ...只需执行类似的操作......
<?php
$string = htmlentities("Résumé");
?>
<html>
<head></head>
<body>
<p><?= $string ?></p>
</body>
</html>
那应该按照你想要的方式输出Résumé
。
如果您没有启用短标记,请将<?= $string ?>
替换为<?php echo $string; ?>
答案 2 :(得分:1)
所以我尝试输出htmlspecialchars()或htmlentities() &LT; p为H.简历&LT; p为H.和浏览器呈现 &LT; p为H.简历&LT; p为H.。
如果你的工作地点显示Résumé
周围有<p></p>
个标签,那么就不要转换段落,只转换你的字符串。然后段落将呈现为HTML,您的字符串将显示在。
答案 3 :(得分:1)
在PHP中有一个非常好的函数 utf8_encode()来解决这个问题。
echo utf8_encode("Résumé");
//will output Résumé instead of R�sum�
答案 4 :(得分:0)
$ str =“你的名字是O?'vins?”;
//输出:你的名字是奥文斯吗? echo stripslashes($ str);
答案 5 :(得分:0)
这对我有用:
使用以下行创建/编辑.htaccess
文件:
AddDefaultCharset UTF-8
AddCharset UTF-8 .php
如果您更喜欢创建/编辑php.ini
:
default_charset = "utf-8"
来源:
答案 6 :(得分:0)
试试这个
输入:
<!DOCTYPE html>
<html>
<body>
<?php
$str = "This is some <b>bold</b> text.";
echo htmlspecialchars($str);
?>
<p>Converting < and > into entities are often used to prevent browsers from using it as an HTML element. <br />This can be especially useful to prevent code from running when users have access to display input on your homepage.</p>
</body>
</html>
输出:
This is some <b>bold</b> text.
Converting < and > into entities are often used to prevent browsers from using it as an HTML element. This can be especially useful to prevent code from running when users have access to display input on your homepage.
答案 7 :(得分:0)
这对我有用。在HTML开始之前尝试这个。我希望它也适合你。
<?php header('Content-Type: text/html; charset=iso-8859-15'); ?>
<!DOCTYPE html>
<html lang="en-US">
<head>
&#13;
答案 8 :(得分:0)
以下在最近遇到类似问题时对我有用:
$str = iconv('iso-8859-15', 'utf-8', $str);
答案 9 :(得分:0)
执行此操作的最佳方法之一是更改SQL数据库中的排序规则。
第1步:转到Mysql数据库
第2步:选择要显示的基于文本的行(例如,帖子或评论)
第3步:编辑该行并按如下所示选择排序规则。
utf8mb4_unicode_ci
请确保更改要显示特殊字符的文本行的排序规则。
有时htmlspecialchars_decode()或任何其他entity()不会将特殊字符转换为普通字符。因此,上述方法肯定会有所帮助。