繁体   English   中英

将文件内容输出为UTF-8会导致字符编码问题

[英]Outputting file contents as UTF-8 leads to character encoding issues

我将标题设置如下:

header( 'Content-Type: text/html; charset="utf-8"' );

然后使用以下代码段将服务器上的本地文件输出到浏览器:

$content = file_get_contents($sPath);
$content = mb_convert_encoding($content, 'UTF-8');
echo $content;

我在服务器上拥有的文件是由lua创建的,因此,以下输出为FALSE (转换前):

var_dump( mb_detect_encoding($content) );

这些文件包含一些字符,例如™ )等,它们在浏览器中显示为普通方形框。 我已阅读以下被建议为类似问题的线程,并且我的代码中的所有变体都无济于事:

当我简单地使用以下内容时,似乎没有问题:

header( 'Content-Type: text/html; charset="iso-8859-1"' );
// setting path here
$content = file_get_contents($sPath);
echo $content;

当我简单地使用以下内容时,似乎没有问题:

 header( 'Content-Type: text/html; charset="iso-8859-1"' ); // setting path here $content = file_get_contents($sPath); echo $content; 

因此,这意味着文件内容实际上是按照ISO-8859-1编码的。 如果要将其输出为UTF-8,则将其从ISO-8859-1明确转换为UTF-8:

$content = mb_convert_encoding($content, 'UTF-8', 'ISO-8859-1');

您始终需要知道要从中进行转换。 只是告诉PHP“转换为UTF-8”,然后让其猜测要转换的内容会有不确定的结果,在您的情况下,它是行不通的。

检查文件编码,是否为没有BOM的utf-8 例如,使用notepad ++进行检查文件编码。

或者也许它很有用:

$content = file_get_contents($sPath);
$content = htmlentities($content);
echo $content;

或者尝试.htaccess:

AddDefaultCharset utf-8
AddCharset utf-8 *
<IfModule mod_charset.c>
    CharsetSourceEnc utf-8
    CharsetDefault utf-8
</IfModule>

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM