HTML 打印功能的页面编码

HTML page encoding for print function

我有一段时间没做 PHP 所以如果事情很简单,我提前道歉。

我正在将一个基于 PHP 的站点迁移到一个共享的虚拟主机,它输出 HTML 标记的方式存在问题。让我们考虑以下从服务器上的文件读取 HTML 并将其输出到 Web 浏览器的代码片段:

$handle = @fopen($file_name, "rb");

$str = @fread($handle, filesize($file_name));
fclose($handle);

print $str;

出于某种原因,它替换了页面上的一些字符。就像它把那个字符而不是撇号一样:

当来自以前的网络托管服务器的完全相同的代码 运行 时看起来很正常:

知道我错过了什么吗?

这是一个编码错误,如果您的文本有一些特殊字符,某些编码类型无法正确识别它..

尝试让你的 header 识别 utf-8 编码,将这个(在你的 php 标签内,开头!)添加到你的代码中

header('Content-Type: text/html; charset=utf-8');
file_put_contents($myFile, "\xEF\xBB\xBF".  $content); 

并将此元标记添加到您的 html 头部

<meta http-equiv="Content-type" content="text/html; charset=utf-8" />

更新:

我对 php 参考文献 (http://php.net/manual/en/function.fopen.php#104325) 做了一些研究,我发现了一些东西!尝试使用此 php 函数来解决您的问题:

<?php 
function utf8_fopen_read($fileName) { 
    $fc = iconv('windows-1250', 'utf-8', file_get_contents($fileName));
    $handle=fopen("php://memory", "rw"); 
    fwrite($handle, $fc); 
    fseek($handle, 0); 
    return $handle; 
} 
?> 

使用示例:

Example usage: 

<?php 
$fh = utf8_fopen_read($filename); 
while (($data = fgetcsv($fh, 1000, ",")) !== false) { 
    foreach ($data as $value) { 
        echo $value . "<br />\n"; 
    } 
} 
?> 

希望对您有所帮助!