我暂时没有完成PHP,所以如果它很简单,我会事先道歉。
我正在将基于PHP的站点迁移到共享的Web托管,并且它输出HTML标记的方式存在问题。让我们考虑以下代码片段,它从服务器上的文件中读取HTML并将其输出到Web浏览器:
$handle = @fopen($file_name, "rb");
$str = @fread($handle, filesize($file_name));
fclose($handle);
print $str;
由于某种原因,它取代了页面上的一些字符。就像它放置那个字符而不是撇号:
虽然从先前的网络托管服务器运行完全相同的代码看起来很正常:
知道我在这里缺少什么吗?
答案 0 :(得分:1)
这是一个编码错误,如果你的文字有一些特殊字符,某些编码类型不能正确识别它..
尝试将您的标题识别为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" />
UPD:
我已经对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";
}
}
?>
希望它有所帮助!