为什么preg_replace()函数不能正常工作?

问题描述 投票:-2回答:1

我的PHP脚本是:

<?php
    $string = '{controller}/{action}';
    $pattern = '/\{([a-z]+)\}/i';
    $replacement = '(?P<$1>[a-z-]+)';
    echo preg_replace($pattern, $replacement, $string);
?>

它显示了这个结果:

(?P[a-z-]+)\/(?P[a-z-]+)

我期待这个:

(?P<controller>[a-z-]+)\/(?P<action>[a-z-]+)

我怎么能这样做?

preg-replace
1个回答
1
投票

您的代码生成正确的结果,即

(?P<controller>[a-z-]+)\/(?P<action>[a-z-]+)

问题是:当你echo出来并在浏览器中显示它时,浏览器将<controller><action>解释为HTML标签,如<p><strong>。所以,它不显示它们;它只显示剩下的内容:

(?P[a-z-]+)\/(?P[a-z-]+)

如果从命令行运行此脚本,您将看到正确的结果。要使其在浏览器中工作,您需要用最后一行替换

echo htmlentities(preg_replace($pattern, $replacement, $string));
© www.soinside.com 2019 - 2024. All rights reserved.