2017-04-05 8 views
-2

PHPでpreg_replace_callbackを置き換えるための助けが必要ですか?

preg_replace(): The /e modifier is no longer supported, use preg_replace_callback instead in line 601 

以下のコードでガット・エラー、

$string = preg_replace('~&#x0*([0-9a-f]+);~ei', 'chr(hexdec("\\1"))', $string); 
$string = preg_replace('~&#0*([0-9]+);~e', 'chr(\\1)', $string); 

、以下のようなエラーを解決するのに役立つ必要があるAMは次のように試してみました。

$string = preg_replace_callback('~&#x0*([0-9a-f]+);~ei', 'chr(hexdec("\\1"))',function ($match) { 
return ($match[1]); 
}, $string); 

しかし、これらのようなエラーはまだありますか?

Requires argument 2, 'chr(hexdec("\1"))' 
+0

と[置換プリプレグ\ _replace()e修飾子の可能性のある重複preg \ _replace \ _callback](http://stackoverflow.com/questions/15454220/replace-preg-replace-e-modifier-with-preg-replace-callback) –

+0

疲れていますが動作しません。 –

+0

あなたが*しようとしたコードはどこですか?第2引数として無名関数をどこに渡そうとしましたか? –

答えて

1

エラーが示すように、e修飾子はもはやあなたのPHPのバージョンでサポートされていません。

preg_replace_callback相当するものは次のようになります。

$string = preg_replace_callback('~&#x([0-9a-f]+);~i', function ($m) { 
    return chr(hexdec($m[1])); 
}, $string); 

NB:ゼロがいることを、次のパターンによって捕捉されるよう、あなたの正規表現で0*は、必要とされていない、そしてそれは、これらのゼロを持っていて気にしません。キャプチャグループでキャプチャされます。あなたが等しいか(those versions produce the errorなど)5.5よりも高いPHPのバージョンであるとして、あなたはhtml_entity_decodeに頼ることができる

しかし、:

$string = html_entity_decode($string); 
関連する問題