我需要正则表达式来替换,<
和>
,但是我想在标签中
替换这个字符&
<
>
&
<body></body>
例子
更换前
<head> <><><>& </head> <body><><>&</body>
更换后
<head> <><><>& </head> <body><><>&</body>
谢谢你 :)
我认为你真正需要的是:
<body>
部分。有关更多信息,请参阅此问题;htmlspecialchars()
为结果。编辑:如果您确切地知道 html 的样子,您当然也可以explode
将您的输入分成两部分,但这在很大程度上取决于输入的确切格式,所以我不推荐它。</head>
<body>
要使用正则表达式执行此操作,需要通过几个步骤完成:
捕捉身体的内弦:
正则表达式:(^.*?<body>)(.*)(<\/body>)$
火柴:
[0] => <head> <><><>& </head> <body><><>&</body>
[1] => <head> <><><>& </head> <body>
[2] => <><>&
[3] => </body>
在matches[2]中分别替换每种类型的字符
重构字符串
$sourcestring="<head> <><><>& </head> <body><><>&</body>";
preg_match('/(^.*?<body>)(.*)(<\/body>)$/ims',$sourcestring,$matches);
$header=$Matches[1];
$body=$matches[2];
$footer=$Matches[3];
$body = preg_replace('/</ims','<',$body);
$body = preg_replace('/>/ims','>',$body);
$body = preg_replace('/&/ims','&',$body);
$output = $header . $body . $footer;
我已经用一些技巧做到了。首先,我在正文标签之间找到文本,然后将其更改为 html 特殊字符并保存。之后,我用[TO_BE_REPLACED]替换正文标记之间的文本,最后我将要替换的文本更改为 htmlspecialchars() 转义的文本
<?php
$str = '<head> <><><>& </head> <body><><>&</body>';
preg_match('/<body>(.*?)<\/body>/', $str, $match);
$special = htmlspecialchars($match[1]); // you can use html entities as well
$str = preg_replace('/<body>(.*?)<\/body>/','<body>[TO_BE_REPLACED]</body>',$str);
echo htmlspecialchars(str_replace('[TO_BE_REPLACED]', $special, $str)); //this one is only to show purpose
echo '<br>----<br>';
echo str_replace('[TO_BE_REPLACED]', $special, $str);
?>