2017-04-18 19 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エスケープに関連していますか?その場合は、プレースホルダ値**を持つ** prepared statementsを使用してください。**これを行うことはありません。この問題やその他の懸案事項については、[PHP the Right Way](http://www.phptherightway.com)を参照してください。 – tadman

+0

'mysqli'(およびprepared statements)は、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' 
関連する問題