繁体   English   中英

使用 preg_replace 替换里面的字符串

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM