我正在使用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中打开它时,一切正常。
答案 0 :(得分:1)
试试这个,希望这会帮助你。您应该启动将字符集定义为utf-8
的标头以获得所需的输出。像这样header('Content-Type: text/html; charset=utf-8');
<?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
<?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);