2012-02-29 50 views
0

我使用PHP更改文件編碼,但它會在每行之後生成一個新的空行。使用PHP更改文件編碼會生成換行符

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

這裏是myfile.txt的

LINE1 [CR] [LF]
LINE2 [CR] [LF]
line3中[CR] [LF ]

轉換命令(BATCH):

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

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

結果:

LINE1 [LF]
[LF]
LINE2 [LF]
[LF]
3號線[LF]
[LF]

你能幫我解決這一問題?

+0

你能提供一個hexdump的輸入嗎? – 2012-02-29 15:23:07

+0

顯示如何調用腳本/如何從腳本的外部提供STDIN ....'cat myfile.txt | PHP的myscript.php'?你嘗試過'php myscript.php Kaii 2012-02-29 15:58:45

+0

@Kaii我必須使用一個Windows BATCH文件,我嘗試了兩種語法,它不會改變任何內容。看起來'iconv'有一個奇怪的行爲... – sinsedrix 2012-02-29 16:19:32

回答

3

你有替代功能: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"; 
+0

好吧,我已經完全改變了答案。 – 2012-02-29 16:31:32

+0

刪除downvote – Kaii 2012-02-29 16:47:54

+0

@Kali:很好。謝謝!我想我們也可以刪除這些評論... – 2012-02-29 21:06:18

0

我發現,因爲雙管命令生成的新線路。所以我決定合併兩個管子只有一個管子。

因此,我改變:

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

到:

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

這解決了這個問題,但沒有回答在哪裏額外的新行是從哪裏來的。