0


0

preg_replace内の関数呼び出しの問題

機能せず、関数を呼び出すと$ 1値が失われます。

echo preg_replace('"\b(http://\S+)"', ''.findTopDomain('$1').'', $text);

正常に動作し、出力:stackoverflow.com

echo preg_replace('"\b(http://\S+)"', ''.findTopDomain('http://stackoverflow.com/questions/ask').'' , $text);

preg_replace内から関数に$ 1値を送信する必要があります。 何がおかしいのですか?

2 Answer


2


e modifierを設定して、置換式を実行する必要があります。

preg_replace('"\b(http://\S+)"e', '"".findTopDomain("$1").""', $text)

置換は有効なPHP式でなければならないことに注意してください。 この場合、式は次のように評価されます。

"".findTopDomain("$1").""

そして、少なくとも `htmlspecialchars`で出力をエスケープすることを忘れないでください:

preg_replace('"\b(http://\S+)"e', '"".htmlspecialchars(findTopDomain("$1")).""', $text)


2


http://de.php.net/manual/en/function.preg-replace-callback.php [php_replace_callback()]を探していますか?

_ コールバックを使用して正規表現の検索と置換を実行します _