2013-05-18 46 views
2

我有兩個文件,b.txt:用PHP爆炸第一變量是untrimmable

&first = cjnk1 
&second = dcnksj2 
&third = cd3 
&fourth = cdln4 

和a.php只會:

<?php 
$data=file_get_contents("b.txt"); 
$rows=explode("\n", $data); 
foreach($rows as $row) 
{ 
    $temp=explode(" = ",$row); 
    $info[ltrim($temp[0],"&")]=$temp[1]; 
} 
echo '<pre>'; 
print_r($info); 
echo $info["&first"]; 
?> 

並且輸出是

Array 
(
    [&first] => cjnk1 
    [second] => dcnksj2 
    [third] => cd3 
    [fourth] => cdln4 
) 

最新第一個索引錯了?即使我使用它,它的不可信。

+3

也許在'&'像不可打印的字符之前有一些東西。 – Gumbo

+1

也許在'&'之前有一些escape-char。使用'var_dump($ temp [0]);'看看它到底是什麼。 – Leri

+0

其字符串(9)「&first」 – filip

回答

0

去除通過PHP的BOM

$BOM = substr($txt, 0, 3); 

if ($BOM == pack("CCC", 0xEF, 0xBB, 0xBF)) { 
    $txt = substr($txt, 3); 
} 

更新

由於deceze點出來,這應該工作正常還(但我沒有查出來呢,請讓我知道是否有什麼問題)

$BOM = substr($txt, 0, 3); 

/* "Double Quotes" are important */ 
if ($BOM == "\xEF\xBB\xBF") { 
    $txt = substr($txt, 3); 
} 
+1

通常是的,但你可以更容易地寫一個BOM作爲'「\ x ..」'字符串字面... :) – deceze

+0

@deceze謝謝你的信息,但是它是什麼意思'..'?你會提供進一步閱讀的提示,謝謝。 – Mahdi

+0

我的意思是:'「\ xEF \ xBB \ xBF」'。這是BOM的字符串文字。不需要'包'。 – deceze

0

嘗試用ltrim($temp[0], "&\x00..\x1F");代替ltrim($temp[0],"&")。這將刪除任何保留的ASCII字符(0-31)以及和號。

-1
foreach($rows as $row) 
{ 
    $temp=explode(" = ",$row); 
    $info[substr($temp[0], 1)]=$temp[1]; 
} 
+0

爲什麼上面的代碼是錯誤的? –