我有一個非常簡單的腳本,它在不同的服務器上表現出不同的行爲!腳本在其他服務器上的行爲不同
這是腳本:
<?php
$list = file_get_contents("list.txt");
$list = str_replace(Array("\r\n", "\r", "\n", "\f"), "\n", $list);
$all = explode("\n\n", $list);
foreach($all as $k => $v) {
$b = preg_replace('/\s+/', '^', $v);
echo $b."<br/><br/>";
}
?>
記載:
System: Avro
Supplier: ABC Inc
Quantity: 1
Type: ICD
Key: PA-658_ao8uY
For Clarity: PA-658_AO8UY
Quantity: 10
Type: PSTHG
Key: tg675_0O09i8
For Clarity: PA-658_AO8UY
我有3臺服務器上測試,我需要它的工作同所有3 他們從PHP 4.3 .10,5.2.13 & 5.3.5
該腳本在PHP 5.2.13上返回此值 - 這正是我所期待的。
System:^Avro^Supplier:^ABC^Inc
Quantity:^1^Type:^ICD^Key:^PA-658_ao8uY^For^Clarity:^PA-658_AO8UY
Quantity:^10^Type:^PSTHG^Key:^tg675_0O09i8^For^Clarity:^PA-658_AO8UY
然而在4.3.10 & 5.3.5,我得到:
System:^^^^^Avro^Supplier:^^^ ^ABC^Inc
Quantity:^^^ ^1^Type:^^^^^^^ICD^Key:^^^^^^^ PA-658_ao8uY^For^Clarity:^ PA-658_AO8UY
Quantity:^^^ ^10^Type:^^^^^^^PSTHG^Key:^^^^^^^ tg675_0O09i8^For^Clarity:^ PA-658_AO8UY
如何得到的輸出是對所有的人都一樣嗎?
感謝
更新: 我有這個工作,通過改變:
$b = preg_replace('/\s+/', '^', $v);
TO
$b = preg_replace('/(\s|\xa0)+/', '^', $v);
也許問題是在[手動]說的東西(HTTP:// WWW .php.net /manual/en/function.str-replace.php):「因爲str_replace()從左向右替換,所以在執行多次替換時可能會替換先前插入的值,另請參閱本文檔中的示例。 – Voitcus 2013-02-27 09:20:38
@Voitcus,'str_replace'部分似乎工作正常。這是'preg_replace',它無法替代所有的空格。它可能是一個字符編碼問題?除了PHP版本,這些系統是否都一樣? – 2013-02-27 09:28:45
我不知道,但preg_replace存在一些問題,請看[this comment](http://www.php.net/manual/en/function.preg-replace.php#85416)和[這一個](http://www.php.net/manual/en/function.preg-replace.php#84385)。甚至與[mb編碼](http://www.php.net/manual/en/function.mb-internal-encoding.php) – Voitcus 2013-02-27 09:35:58