サーバーによって動作が異なるように見える非常に単純なスクリプトがあります。
これはスクリプトです:
<?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です。
スクリプトはPHP5.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);
に
$b = preg_replace('/(\s|\xa0)+/', '^', $v);