我需要使用正则表达式将<
,>
和&
替换为<
,>
和&
但是这个字符我只想在<body></body>
标签中替换
例如
更换前
<head> <><><>& </head> <body><><>&</body>
更换后
<head> <><><>& </head> <body><><>&</body>
谢谢你:)
答案 0 :(得分:0)
我认为你真正需要的是:
<body>
部分的xml解析器。有关详细信息,请参阅this question; htmlspecialchars()
了解结果。 修改:如果您确切知道html的内容,您当然也可以在explode
或</head>
上<body>
将您的输入分成两部分,但这将高度依赖于输入的确切格式,所以我不推荐它。
答案 1 :(得分:0)
要使用正则表达式执行此操作,需要通过以下几个步骤完成:
捕获正文的内部字符串:
正则表达式:(^.*?<body>)(.*)(<\/body>)$
匹配:
[0] => <head> <><><>& </head> <body><><>&</body>
[1] => <head> <><><>& </head> <body>
[2] => <><>&
[3] => </body>
在匹配[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;
答案 2 :(得分:0)
我已经完成了一些技巧。首先,我在body标签之间找到文本,然后将其更改为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);
?>