【问题标题】:Using PHP to change file encoding generates newlines使用 PHP 更改文件编码生成换行符
【发布时间】:2012-02-29 15:13:19
【问题描述】:

我使用 PHP 更改文件编码,但它在每行之后生成一个新的空行。

$t_comment = file_get_contents('php://stdin');
$t_comment = iconv("ISO-8859-1", "UTF-8//IGNORE",$t_comment);
echo $t_comment;

这里是 myfile.txt

第 1 行 [CR][LF]
第 2 行 [CR][LF]
第 3 行 [CR][LF]

转换命令(BATCH):

C:\> type myfile.txt | php.exe myscript.php

C:\> php.exe myscript.php < myfile.txt

结果:

line1 [LF]
[LF]
第 2 行 [LF]
[LF]
第 3 行 [LF]
[LF]

你能帮我解决这个问题吗?

【问题讨论】:

  • 你能提供你输入的十六进制转储吗?
  • 显示如何调用脚本/如何从脚本外部提供 STDIN ....cat myfile.txt | php myscript.php?你试过php myscript.php &lt; myfile.txt吗?你用的是哪个外壳?
  • @Kaii 我必须使用 Windows BATCH 文件,我尝试了两种语法,它没有改变任何东西。看来iconv 确实有一种奇怪的行为……

标签: php batch-file cmd iconv


【解决方案1】:

您有替代功能:utf8_encodemb_convert_encoding,虽然我已经在本地测试了 iconv 并且它可以工作,但我没有使用 Windows。

考虑到您在 Windows 上并使用 type 生成 PHP 脚本输入,您应该检查活动控制台代码页,这可能会影响 type 命令的输出:http://www.microsoft.com/resources/documentation/windows/xp/all/proddocs/en-us/chcp.mspx?mfr=true

首先,尝试通过将代码的第一行更改为以下内容来消除 iconv 的问题,然后看看会发生什么:

$t_comment = "line 1 \r\nline 2 \r\nline 3 \r\n";

【讨论】:

  • 好的,我已经完全改变了答案。
  • 控制台代码页默认为 850,我尝试将其更改为 863,但没有任何改变。问题似乎不是来自iconv,因为echo不更改输入文件会导致同样的问题。
【解决方案2】:

我发现新行是由于双管道命令而生成的。所以我决定将两个 sripts 合并为只有一个管道。

所以我改变了:

C:\> type myfile.txt | php.exe myscript1.php | php.exe myscript2.php

到:

C:\> type myfile.txt | php.exe myscript1-merge2.php

这解决了问题,但没有回答额外的换行符是从哪里来的。

【讨论】:

    猜你喜欢
    • 2010-12-25
    • 2018-06-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-01-11
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多