2009-11-22 93 views
2

我想將八進制符號像\46轉換爲正常符號,如&
問題是輸入是使用preg_match_all()創建的,放入一個數組然後檢索。八進制數組登錄字符串

如果我手動輸入\46八進制與雙引號的變量,像
$input="\046";
那麼PHP將好聽轉換。

但是,當我把它放入preg_match_all()的一個數組中時,它將返回它未轉換。

我想轉換它,因爲我想查詢具有「&」符號作爲&符號的記錄的數據庫(mysql)。

+0

爲什麼這是一個社區wiki? – 2009-11-22 13:00:27

+0

@carlos嗯...爲其他人編輯:) – Chris 2009-11-22 15:46:14

+1

是的,但我會說這不是常規類型問題的最佳選擇「我該怎麼做?」以及相應的答案,因爲它不會聲望積分。無論如何,我很高興幫助:) – 2009-11-22 20:43:26

回答

2

使用stripcslashes()

stripcslashes documentation

string stripcslashes (string $str)
返回帶反斜槓的字符串 剝離。
表示C樣\ n, \ r ...,八進制和十六進制 表示。

<?php 
$a = 'a \046 b \075 c'; 
$b = stripcslashes($a); 
echo "$a ==> $b"; 
?> 

outputs: a \046 b \075 c ==> a & b = c 
1

不是特別優雅,但你可以eval的字符串。當然,這也會評估字符串中的其他內容,但也許這就是你想要的。如果你想避免評估變量,你應該用\ $ first替換$。

<?php 

// The string 
$a='test a \046 b'; 

// Output "test a \046 b" 
echo "$a\n"; 

// Convert \046 to & 
eval("\$c=\"$a\";"); 

// Output "test a & b" 
echo "$c\n"; 

?> 
0

,但是當我有它在陣列從預浸匹配所有,它返回它不轉換。

嘗試:

$tmp=implode('', $array_from_pregmatch); 
$input="$tmp"; 
2

有一個有趣的替代招(或者說黑客)

$a = 'a \046 b \075 c'; 
echo preg_replace('~\\\\(0\d\d)~e', '"\\\\$1"', $a); 
相關問題