替换部分字符串php

时间:2013-06-22 13:47:52

标签: php regex

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

例如

更换前

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

更换后

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

谢谢你:)

3 个答案:

答案 0 :(得分:0)

我认为你真正需要的是:

  1. 用于解析字符串并获取<body>部分的xml解析器。有关详细信息,请参阅this question;
  2. htmlspecialchars()了解结果。
  3. 修改:如果您确切知道html的内容,您当然也可以在explode</head><body>将您的输入分成两部分,但这将高度依赖于输入的确切格式,所以我不推荐它。

答案 1 :(得分:0)

描述

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

  1. 捕获正文的内部字符串:

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

    enter image description here

    匹配:

    [0] => <head> <><><>& </head> <body><><>&</body>
    [1] => <head> <><><>& </head> <body>
    [2] => <><>&
    [3] => </body>
    
  2. 在匹配[2]

  3. 中分别替换每种类型的字符
  4. 重建字符串

  5. 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;
    

答案 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);
?>

Check demo