如何使用 file_get_contents 以正确的 utf-8 编码获取文件内容?
How to get file content with a proper utf-8 encoding using file_get_contents?
我需要获取 utf-8 编码的远程文件的内容。该文件在 utf-8 中。当我在屏幕上显示该文件时,它具有正确的编码:
http://www.parfumeriafox.sk/source_file.html
(注意 ň
和 č
字符,例如,这些都可以)。
当我运行这段代码时:
<?php
$url = 'http://parfumeriafox.sk/source_file.html';
$csv = file_get_contents_utf8($url);
header('Content-type: text/html; charset=utf-8');
print $csv;
function file_get_contents_utf8($fn) {
$content = file_get_contents($fn);
return mb_convert_encoding($content, 'utf-8');
}
(您可以使用 http://www.parfumeriafox.sk/encoding.php 运行),然后我得到问号而不是那些特殊字符。我对此进行了大量研究,我尝试了标准 file_read_contents
函数,我什至使用了一些流 bla bla php 上下文函数,我还尝试了 fopen 和 fread 函数来读取二进制级别的文件,似乎没有任何效果。我已经尝试过发送和不发送 header。这应该是非常简单的,我做错了什么?当我用一些编码检测函数检查那个字符串时,它 returns UTF-8
.
这个怎么样????
为此我使用了 header('Content-Type: text/plain;; charset=Windows-1250');
佛手柑、香柠檬、tráva、rebarbora、bazalka;levanduľa、škorica、hruška;céderové drevo、vanilka、pižmo、amberlyn
这个代码对我有用
<?php
header('Content-Type: text/plain;charset=Windows-1250');
echo file_get_contents('http://www.parfumeriafox.sk/source_file.html');
?>
问题不在于 file_get_contents()
我将 $data 保存到一个文件中,字符是正确的,但我的文本编辑器仍然没有正确编码。见下图。
$data = file_get_contents('http://www.parfumeriafox.sk/source_file.html');
file_put_contents('doc.txt',$data);
更新
这里显示的似乎是一个有问题的字符。
它也出现在下面的 HTML 图像中。呈现为 ¾
其十六进制值为 xBE(十进制 190)
我试过这两个字符集。都没有用。
header('Content-Type: text/plain; charset=ISO 8859-1');
header('Content-Type: text/plain; charset=ISO 8859-2');
更新结束
它通过添加 header WITHOUT charset=utf-8.
来工作
这两个 header 有效
header('Content-Type: text/plain');
header('Content-Type: text/html');
这两个 header 不起作用
header('Content-Type: text/plain; charset=utf-8');
header('Content-Type: text/html; charset=utf-8');
此代码已测试并显示所有字符。
<?php
header('Content-Type: text/plain');
echo file_get_contents('http://www.parfumeriafox.sk/source_file.html');
?>
<?php
header('Content-Type: text/html');
echo file_get_contents('http://www.parfumeriafox.sk/source_file.html');
?>
这些是一些有问题的字符及其十六进制值。
这是使用 UTF-8 编码在 Notepad++ 中查看的保存文件。
根据这些字符集检查十六进制值。
从上面table我看到字符集是Latin2.
我去了Wikipedia Windows code page,发现Latin2是Windows-1250
佛手柑、香柠檬、tráva、rebarbora、bazalka;levanduľa、škorica、hruška;céderové drevo、vanilka、pižmo、amberlyn
您可以通过打开开发人员控制台并查看 document.characterSet
:
来查看您的浏览器决定文档使用的字符集
> document.characterSet
"windows-1250"
有了这些知识,我们可以要求 iconv 为我们从 "windows-1250" 转换为 utf-8:
<?php
$text = file_get_contents("source_file.csv");
$text = iconv("windows-1250", "utf-8", $text);
print($text);
输出是有效的 utf-8,levanduľa 也能正确显示。
我需要获取 utf-8 编码的远程文件的内容。该文件在 utf-8 中。当我在屏幕上显示该文件时,它具有正确的编码:
http://www.parfumeriafox.sk/source_file.html
(注意 ň
和 č
字符,例如,这些都可以)。
当我运行这段代码时:
<?php
$url = 'http://parfumeriafox.sk/source_file.html';
$csv = file_get_contents_utf8($url);
header('Content-type: text/html; charset=utf-8');
print $csv;
function file_get_contents_utf8($fn) {
$content = file_get_contents($fn);
return mb_convert_encoding($content, 'utf-8');
}
(您可以使用 http://www.parfumeriafox.sk/encoding.php 运行),然后我得到问号而不是那些特殊字符。我对此进行了大量研究,我尝试了标准 file_read_contents
函数,我什至使用了一些流 bla bla php 上下文函数,我还尝试了 fopen 和 fread 函数来读取二进制级别的文件,似乎没有任何效果。我已经尝试过发送和不发送 header。这应该是非常简单的,我做错了什么?当我用一些编码检测函数检查那个字符串时,它 returns UTF-8
.
这个怎么样????
为此我使用了 header('Content-Type: text/plain;; charset=Windows-1250');
佛手柑、香柠檬、tráva、rebarbora、bazalka;levanduľa、škorica、hruška;céderové drevo、vanilka、pižmo、amberlyn
这个代码对我有用
<?php
header('Content-Type: text/plain;charset=Windows-1250');
echo file_get_contents('http://www.parfumeriafox.sk/source_file.html');
?>
问题不在于 file_get_contents()
我将 $data 保存到一个文件中,字符是正确的,但我的文本编辑器仍然没有正确编码。见下图。
$data = file_get_contents('http://www.parfumeriafox.sk/source_file.html');
file_put_contents('doc.txt',$data);
更新
这里显示的似乎是一个有问题的字符。 它也出现在下面的 HTML 图像中。呈现为 ¾
其十六进制值为 xBE(十进制 190)
我试过这两个字符集。都没有用。
header('Content-Type: text/plain; charset=ISO 8859-1');
header('Content-Type: text/plain; charset=ISO 8859-2');
更新结束
它通过添加 header WITHOUT charset=utf-8.
来工作这两个 header 有效
header('Content-Type: text/plain');
header('Content-Type: text/html');
这两个 header 不起作用
header('Content-Type: text/plain; charset=utf-8');
header('Content-Type: text/html; charset=utf-8');
此代码已测试并显示所有字符。
<?php
header('Content-Type: text/plain');
echo file_get_contents('http://www.parfumeriafox.sk/source_file.html');
?>
<?php
header('Content-Type: text/html');
echo file_get_contents('http://www.parfumeriafox.sk/source_file.html');
?>
这些是一些有问题的字符及其十六进制值。
这是使用 UTF-8 编码在 Notepad++ 中查看的保存文件。
根据这些字符集检查十六进制值。
从上面table我看到字符集是Latin2.
我去了Wikipedia Windows code page,发现Latin2是Windows-1250
佛手柑、香柠檬、tráva、rebarbora、bazalka;levanduľa、škorica、hruška;céderové drevo、vanilka、pižmo、amberlyn
您可以通过打开开发人员控制台并查看 document.characterSet
:
> document.characterSet
"windows-1250"
有了这些知识,我们可以要求 iconv 为我们从 "windows-1250" 转换为 utf-8:
<?php
$text = file_get_contents("source_file.csv");
$text = iconv("windows-1250", "utf-8", $text);
print($text);
输出是有效的 utf-8,levanduľa 也能正确显示。