2017-04-18 76 views
-2

get_magic_quotes_gpc()0替換文本反斜槓和單引號

如果我使用preg_replace()與這些陣列:

$replace[0]=">"; 
$replace[1]="<"; 
$replace[2]="&"; 
$replace[3]='"'; 

$pattern[0]="#&gt;#"; 
$pattern[1]="#&lt;#"; 
$pattern[2]="#&amp;#"; 
$pattern[3]="#&quot;#"; 

$pass=preg_replace($pattern, $replace, $pass); 

它的工作原理,除了反斜槓和單引號。

我嘗試這樣做:

$replace[5]="\\"; 
$pattern[5]="/&#92;/"; 

,但它失敗。

我使用PHP5.2

+2

什麼這個代碼的意圖?我非常關心它的應用。 「魔術引號」因爲某個原因而被殺害:他們是一個非常糟糕的主意**。這與SQL轉義有關嗎?如果是這樣,請使用**準備好的語句和佔位符值**,但不要這樣做。有關此問題和其他問題的建議,請參見[PHP正確方法](http://www.phptherightway.com)。 – tadman

+0

我在某個地方讀過'mysqli'(和準備好的語句)可以用於PHP 5或更高版本並使用MySQL 4.1.3+。如果您的環境不支持這一點,那麼升級肯定是時候了。 – mickmackusa

+1

'htmlspecialchars()'會爲你做這個... – miken32

回答

0

根據您的圖案與分隔符在模式中#衝突您模式可能不會奏效。你的$pattern[5]模式應該很好。在測試過程中,這可能是一個簡單的錯誤。

這裏是代碼,將使用流行的和非衝突斜槓(/)作爲分隔符來替換你的字符數組:(Demo

$pattern[0]="/&gt;/"; 
$pattern[1]="/&lt;/"; 
$pattern[2]="/&amp;/"; 
$pattern[3]="/&quot;/"; 
$pattern[4]="/&#39;/"; 
$pattern[5]="/&#92;/"; 

$replace[0]=">"; 
$replace[1]="<"; 
$replace[2]="&"; 
$replace[3]='"'; 
$replace[4]="'"; 
$replace[5]="\\"; 

$pass="Th&#92;is &lt; is &amp; a &gt; sample &quot;string&#39;"; 
var_export($pass); 
echo "\n"; 
echo preg_replace($pattern, $replace, $pass); 

輸出:

'Th&#92;is &lt; is &amp; a &gt; sample &quot;string&#39;' 
Th\is < is & a > sample "string'