php file_get_contents() 将 html 实体如 ö 转换为 ö

php file_get_contents() converts html entities like ö to ö

我尝试在带有

的文本区域中显示 php 文件的内容
<textarea ...>
<?php echo file_get_contents("file.php"); ?>
</textarea>

但它会将 html 个实体(例如 &ouml;)转换为 ö。因为它是 php 代码,所以我不能使用像 htmlspecialchars 这样的转换,因为它会使 <> 和引号等变砖

编辑:

我用浏览器查看了源码,确实有一个ö。

请帮忙,谢谢!

我认为你的 file.php 中有一些 non-UTF-8 字符。试试这个:

     $content = file_get_contents('/tmp/file.php');
     $content = mb_convert_encoding($content, 'UTF-8',mb_detect_encoding($content, 'UTF-8, ISO-8859-1', true)); 
     print_r($content);

您可以参考此评论http://php.net/manual/en/function.file-get-contents.php#85008

<textarea ...>
<?php echo htmlentities(file_get_contents("file.php")); ?>
</textarea>

例子

将一些字符转换为 HTML 个实体:

<?php
$str = '<a href="https://www.w3schools.com">Go to w3schools.com</a>';
echo htmlentities($str);
?>

上述代码的 HTML 输出将是(查看源代码):

&lt;a href=&quot;https://www.w3schools.com&quot;&gt;Go to w3schools.com&lt;/a&gt;

以上代码的浏览器输出将是:

<a href="https://www.w3schools.com">Go to w3schools.com</a>

htmlspecialchars 将更改:

< &ouml;

至:

&lt; &amp;ouml;

没关系

它将显示在文本区域中:

< &ouml;

提交表单后,它会发送到服务器文本

< &ouml;

不是:

&lt; &amp;ouml;

在 Chrome 中测试 jQuery:

$('#layout').html('<form method="POST"><textarea name="x">&lt;&amp;ouml;</textarea><input type="submit" /></form>')