[英]Using preg_replace to replace string inside
<?php
$str = htmlspecialchars('<nav><a>something</a></nav>');
$pattern = htmlspecialchars('/<nav><a>something</a></nav>/i');
echo htmlspecialchars(preg_replace($pattern, '<nav> <a href="hi">click</a>
</nav>', $str));
?>
我需要echo
像这样回显:
<nav> <a href="hi">click</a> </nav>
但它显示了这个错误:
警告:preg_replace() 期望参数 4 为 int,字符串在 /opt/lampp/htdocs/Workaera/Sample.php 第 19 行中给出
你忘了逃避斜线。 此代码有效:
$str = htmlspecialchars('<nav><a>something</a></nav>');
$pattern = htmlspecialchars('/<nav><a>something<\/a><\/nav>/i');
echo htmlspecialchars(preg_replace($pattern, '<nav> <a href="hi">click</a>
</nav>', $str));
?>
但在你的情况下 preg_replace 可能是矫枉过正。 试试 str_replace 代替:
$str = htmlspecialchars('<nav><a>something</a></nav>');
$pattern = htmlspecialchars('<nav><a>something</a></nav>');
echo str_replace($str, $pattern, '<nav> <a href="hi">click</a>
</nav>', $str);
您的模式无效,因为 HTML 结束标记中未转义的正斜杠。
你应该做的是
//escape HTML
$htmlEscapedPattern = htmlspecialchars('<nav><a>something</a></nav>');
//escape slashes
$forwardSlashEscapedPattern = str_replace("/", "\/", $htmlEscapedPattern);
//wrap as regex pattern
$pattern = "/" . $forwardSlashEscapedPattern . "/i";
使用以下 php 代码来获得您想要的结果。
$str = htmlspecialchars('<nav><a>something</a></nav>');
$pattern = htmlspecialchars('/<nav><a>something<\/a><\/nav>/i');
echo htmlspecialchars(preg_replace($pattern, '<nav> <a href="hi">click</a> </nav>', $str));
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.