Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/259.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 使用preg_replace替换内部字符串_Php_Regex_Preg Replace - Fatal编程技术网

Php 使用preg_replace替换内部字符串

Php 使用preg_replace替换内部字符串,php,regex,preg-replace,Php,Regex,Preg Replace,但它显示了这个错误: 警告:preg_replace()要求参数4为int,字符串为 /第19行的opt/lampp/htdocs/Workaera/Sample.php 你忘了逃过刀砍。此代码适用于: <nav> <a href="hi">click</a> </nav> $str=htmlspecialchars(' “,$str”); ?> 但在你的情况下,preg_替换可能是杀伤力过大。请尝试使用str_替换: $s

但它显示了这个错误:

警告:preg_replace()要求参数4为int,字符串为 /第19行的opt/lampp/htdocs/Workaera/Sample.php


你忘了逃过刀砍。此代码适用于:

<nav> <a href="hi">click</a> </nav>
$str=htmlspecialchars('
“,$str”);
?>
但在你的情况下,preg_替换可能是杀伤力过大。请尝试使用str_替换:

$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));

?>
$str=htmlspecialchars('
“,$str);

您的模式无效,因为HTML结束标记中有未转义的前斜杠

你应该做的是

$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
$htmlEscapedPattern=htmlspecialchars('something');
//逃生斜线
$forwardSlashEscapedPattern=str_replace(“/”、“\/”、$htmlEscapedPattern);
//包装为正则表达式模式
$pattern=“/”$forwardSlashEscapedPattern。“/i”;

使用以下php代码获得所需的结果

//escape HTML
$htmlEscapedPattern = htmlspecialchars('<nav><a>something</a></nav>');
//escape slashes
$forwardSlashEscapedPattern = str_replace("/", "\/", $htmlEscapedPattern);
//wrap as regex pattern
$pattern = "/" . $forwardSlashEscapedPattern . "/i";
$str=htmlspecialchars(“”,$str));

$pattern
中没有图案。尝试
stripos()
而不是preg\u replace。这是所提到的必需模式,对吗。但是OP有一个
/i
修饰符。也许可以使用
str\u ireplace()
来代替。不工作的人…不工作的人..不工作的人..你应该提供更多信息,因为这个代码段会返回你期望的确切结果。还请注意,在原始代码中,您正在使用
htmlspecialchars
打印转义HTML,但在预期的输出中,HTML没有转义。如果这是问题,只需
echo
而不转义,例如
echo preg_替换($pattern,,$str)
//escape HTML
$htmlEscapedPattern = htmlspecialchars('<nav><a>something</a></nav>');
//escape slashes
$forwardSlashEscapedPattern = str_replace("/", "\/", $htmlEscapedPattern);
//wrap as regex pattern
$pattern = "/" . $forwardSlashEscapedPattern . "/i";
$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));