我想將八進制符號像\46
轉換爲正常符號,如&
。
問題是輸入是使用preg_match_all()
創建的,放入一個數組然後檢索。八進制數組登錄字符串
如果我手動輸入\46
八進制與雙引號的變量,像
$input="\046";
那麼PHP將好聽轉換。
但是,當我把它放入preg_match_all()
的一個數組中時,它將返回它未轉換。
我想轉換它,因爲我想查詢具有「&」符號作爲&符號的記錄的數據庫(mysql)。
我想將八進制符號像\46
轉換爲正常符號,如&
。
問題是輸入是使用preg_match_all()
創建的,放入一個數組然後檢索。八進制數組登錄字符串
如果我手動輸入\46
八進制與雙引號的變量,像
$input="\046";
那麼PHP將好聽轉換。
但是,當我把它放入preg_match_all()
的一個數組中時,它將返回它未轉換。
我想轉換它,因爲我想查詢具有「&」符號作爲&符號的記錄的數據庫(mysql)。
使用stripcslashes()
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
不是特別優雅,但你可以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";
?>
,但是當我有它在陣列從預浸匹配所有,它返回它不轉換。
嘗試:
$tmp=implode('', $array_from_pregmatch);
$input="$tmp";
有一個有趣的替代招(或者說黑客)
$a = 'a \046 b \075 c';
echo preg_replace('~\\\\(0\d\d)~e', '"\\\\$1"', $a);
爲什麼這是一個社區wiki? – 2009-11-22 13:00:27
@carlos嗯...爲其他人編輯:) – Chris 2009-11-22 15:46:14
是的,但我會說這不是常規類型問題的最佳選擇「我該怎麼做?」以及相應的答案,因爲它不會聲望積分。無論如何,我很高興幫助:) – 2009-11-22 20:43:26