奇怪的Linux文件写作

时间:2017-05-13 06:57:04

标签: php linux file utf-8

我正在使用PHP进行开发。我只有以下声明:

<?php
$text = "http://www.aecinema.ir/movie/%d8%a7%db%8c%d9%86-%d9%be%db%8c%da%a9%d8%a7%d9%86-2/";
$text = urldecode($text);
$log_file = fopen("log.txt", "w");
$text = substr($text, -100000);
@$text = mb_convert_encoding($text, 'UTF-8', 'OLD-ENCODING');
fwrite($log_file, $text);
fclose($log_file);
?>

在Windows操作系统下,日志文件的内容符合预期:

http://www.aecinema.ir/movie/این-پیکان-2/

但在Linux(CentOS)下,输出是:

http://www.aecinema.ir/movie/این-پیکان-2/

解码错误。

编辑:脚本由Cron运行。我不知道这是否有所不同。

编辑:我注意到只有在使用浏览器打开文件时,字符才会显示为奇怪。当我下载文件并在Windows中打开它时,一切正常。

1 个答案:

答案 0 :(得分:1)

试试这个,希望这会帮助你。您应该启动将字符集定义为utf-8的标头以获得所需的输出。像这样header('Content-Type: text/html; charset=utf-8');

Try this code snippet here

<?php

ini_set('display_errors', 1);
header('Content-Type: text/html; charset=utf-8');
$s='http://www.aecinema.ir/movie/%d8%a7%db%8c%d9%86-%d9%be%db%8c%da%a9%d8%a7%d9%86-2/';
echo $s = urldecode($s);

输出: http://www.aecinema.ir/movie/این-پیکان-2/

解决方案2: Not a good solution than first one

Try this code snippet here

<?php

ini_set('display_errors', 1);
echo '<meta charset="UTF-8">';
$s='http://www.aecinema.ir/movie/%d8%a7%db%8c%d9%86-%d9%be%db%8c%da%a9%d8%a7%d9%86-2/';
echo $s = urldecode($s);

整个代码:

<?php
ini_set('display_errors', 1);

header("Content-type: text/html; charset=utf-8");
$text = "http://www.aecinema.ir/movie/%d8%a7%db%8c%d9%86-%d9%be%db%8c%da%a9%d8%a7%d9%86-2/";
$text = urldecode($text);
$log_file = fopen("log.txt", "w");
$text = substr($text, -100000);
fwrite($log_file, $text);
fclose($log_file);