3

我需要正则表达式来替换,<>,但是我想在标签中 替换这个字符&&lt;&gt;&amp;<body></body>

例子

更换前

<head> <><><>& </head> <body><><>&</body>

更换后

<head> <><><>& </head> <body>&lt;&gt;&lt;&gt;&amp;</body>

谢谢你 :)

4

3 回答 3

0

我认为你真正需要的是:

  1. 一个 xml 解析器,用于解析您的字符串并获取该<body>部分。有关更多信息,请参阅此问题
  2. htmlspecialchars()为结果。

编辑:如果您确切地知道 html 的样子,您当然也可以explode将您的输入分成两部分,但这在很大程度上取决于输入的确切格式,所以我不推荐它。</head><body>

于 2013-06-22T13:51:13.787 回答
0

描述

要使用正则表达式执行此操作,需要通过几个步骤完成:

  1. 捕捉身体的内弦:

    正则表达式:(^.*?<body>)(.*)(<\/body>)$

    在此处输入图像描述

    火柴:

    [0] => <head> <><><>& </head> <body><><>&</body>
    [1] => <head> <><><>& </head> <body>
    [2] => <><>&
    [3] => </body>
    
  2. 在matches[2]中分别替换每种类型的字符

  3. 重构字符串

PHP 代码示例

$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','&lt;',$body);
$body = preg_replace('/>/ims','&gt;',$body);
$body = preg_replace('/&/ims','&amp;',$body);

$output = $header . $body . $footer;
于 2013-06-22T16:21:50.053 回答
0

我已经用一些技巧做到了。首先,我在正文标签之间找到文本,然后将其更改为 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);
?>

检查演示

于 2013-06-22T22:31:54.397 回答