PHP 从不同的编码页面打开一个 Unicode 编码文件


PHP fopen an Unicode encoded file from a different encoded page

我有一个存储在以 UTF-8 编码的服务器中的文本文件,并且 im 试图从另一台以 shift_JIS 编码的服务器的网页加载该文件。不过我无法让它工作。这是我的原始代码:

function whatever() {
 $open_file = fopen("http://www.myass.com/whatever.txt", 'r');
 $whatevers = explode("*", fgets($open_file));
 $whatevers_num =count($whatevers)-2;
 $i=1;
 while($i <= $whatevers_num) {
   $details = explode("|", $whatevers[$i++]);
   echo <<<EOF
   $details[1] - $details[2] - $details[3]
EOF;
 }
  fclose($open_file);
}

我尝试这样做:

function whatever() {
 $open_file = fopen(mb_convert_encoding("http://www.myass.com/whatever.txt", "shift_jis"), 'r');
 $whatevers = explode("*", fgets($open_file));
 $whatevers_num =count($whatevers)-2;
 $i=1;
 while($i <= $whatevers_num) {
   $details = explode("|", $whatevers[$i++]);
   echo <<<EOF
   $details[1] - $details[2] - $details[3]
EOF;
 }
  fclose($open_file);
}

甚至这个:

function whatever() {
 $open_file = fopen("http://www.myass.com/whatever.txt", 'r');
 $whatevers = explode("*", fgets($open_file));
 $whatevers_num =count($whatevers)-2;
 $i=1;
 while($i <= $whatevers_num) {
   $details = explode("|", $whatevers[$i++]);
   echo <<<EOF
   $details[1] - $details[2] - $details[3]
EOF;
 }
  fclose($open_file);
}
ob_start();
whatever();
$get_whatever = ob_get_contents();
ob_end_clean();
$encode = mb_convert_encoding("$get_whatever", "shift_jis");
echo $encode;

但是没有任何效果,我只得到乱码字符。我能做什么?

谢谢。

我建议将文件的全部内容(使用 file_get_contents 或 CURL)加载到字符串中并在执行任何其他类型的处理之前对其进行转换。 这可确保您手头有完整的转换文本。

$utf_string = file_get_contents('http://www.myass.com/whatever.txt');
$sjis_string = mb_convert_encoding($utf_string, 'SJIS', 'UTF-8');
echo($sjis_string);

在此之后,您可以启动explode和循环逻辑。