【问题标题】:replace part of string php替换部分字符串php
【发布时间】:2013-06-19 12:59:22
【问题描述】:

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

例子

替换前

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

替换后

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

谢谢你:)

【问题讨论】:

    标签: php regex


    【解决方案1】:

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

    【讨论】:

    • 这也将双引号和单引号更改为各自的字符,这不包含在 OP 中。
    • @Denomales 如果不需要 htmlspecialchars(),他可以将数组与 str_replace 一起使用。他没有提到ONLY这些字符将被替换。
    • 没错,但是他非常明确需要替换哪些字符。
    • @Denomales 看起来与 html 编码一模一样...顺便说一下,您的答案使用了 3 次 preg_replace ,您可以使用它一次并将 2 个数组作为模式数组和第二个替换数组传递,但是最简单的方法是将 str_replace 也与数组一起用作参数。为“
    【解决方案2】:

    说明

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

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

      正则表达式:(^.*?&lt;body&gt;)(.*)(&lt;\/body&gt;)$

      匹配:

      [0] => <head> <><><>& </head> <body><><>&</body>
      [1] => <head> <><><>& </head> <body>
      [2] => <><>&
      [3] => </body>
      
    2. 在匹配项中分别替换每种类型的字符[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;
    

    【讨论】:

      【解决方案3】:

      我认为你真正需要的是:

      1. 一个 xml 解析器,用于解析您的字符串并获取 &lt;body&gt; 部分。更多信息请见this question
      2. htmlspecialchars() 获取结果。

      编辑:如果您确切知道 html 的样子,您当然也可以在 &lt;/head&gt;&lt;body&gt; 上使用 explode 将您的输入分成两部分,但这将是高度取决于输入的确切格式,所以我不推荐它。

      【讨论】:

      • 我需要这个,因为我在 中有带有这个 和 & 的大 xml 文件,而 simplexml_load_file() 现在无法读取文件我加载带有文件获取内容的文件然后我想用 preg_replace 替换
      • @php12345 也许像 XMLReader 这样的东西会起作用,请参阅我链接到的问题。
      猜你喜欢
      • 2012-07-17
      • 2017-07-14
      • 2013-09-22
      • 2016-02-14
      • 1970-01-01
      • 1970-01-01
      • 2021-03-25
      • 1970-01-01
      相关资源
      最近更新 更多