0

urldecode内部で使用する方法はありpreg_replaceますか?

私はこのようなことを試しました:

$body = preg_replace('#[url]http://www.mydomain.net/go/?i=(.*?)[/url]#','[url=http://www.mydomain.com/go/?i=$1]'.urldecode($1).'[/url]',$body);

しかし、それはエラーで報告します:

予期しない T_LNUMBER、T_VARIABLE または '$' が必要です

これは私の文字列です:

[url]http://www.mydomain.net/?go=http%3A%2F%2Fpastebin.com%2FU5RbSVtQ[/url] 

次のように変更する必要があります。

[url=http://www.mydomain.net/?go=http%3A%2F%2Fsafe.dayszone.com%2F%3Fc%3D311d93]http://safe.dayszone.com/?c=311d93[/url]
4

2 に答える 2

0

試す

preg_replace_callback

代わりに

preg_replace
于 2013-06-03T06:04:43.483 に答える
0

[いくつかの問題: 1.やなどの正規表現のメタ文字の一部をエスケープしていません? 。 2. 関数に依存する置換を行うには preg_replace_callback を使用する必要があります。

PHP 5.3 未満と互換性のあるソリューションの例を次に示します。

$body = '[url]http://www.mydomain.net/go/?i=ABC123[/url]';

$body =  preg_replace_callback(
    '#'.preg_quote('[url]http://www.mydomain.net/go/?i=').'(.*?)'.preg_quote('[/url]').'#',
    create_function('$match', 'return \'[url=http://www.mydomain.com/go/?i=\'.$match[1].\']\'.urldecode($match[1]).\'[/url]\';'),
    $body);

PHP 5.3 以降では、より便利なcreate_function ()の代わりに無名関数を使用できます。

于 2013-06-03T06:10:44.227 に答える