修改两个特定标签之间的字符串 - php

时间:2016-11-01 14:21:14

标签: php

更新了问题,不幸的是我之前没有解释过。

详细信息:

我有一个包含多行的数据库,每行有大量数据,但每个数据的共同点是随机顺序的<pre><code></code></pre>个标记。

示例:

$string = "
    <h2>Heading 2</h2>
    Something 
        <pre><code> alot of html and other code here  </code></pre> 
    something something 
        <pre><code> alot of html and other code here  </code></pre>
";


注意:每次字符串的顺序不一样,可能会有更多或更少<pre><code>个标签

现在我想将<pre><code></code><pre>标记内的代码显示为纯文本,您知道我必须将每个"<""&lt;"">"转换为{{1但问题是pre标签之外还有其他标签。如果我使用"&gt;",它会将所有标签显示为纯文本,甚至是h2标签和预标签。

所以我想要一种方法只使用htmlspecialchars($string);函数来预标记之间的数据。

2 个答案:

答案 0 :(得分:0)

我相信以下内容可能会奏效:

$str = preg_replace("/<pre><code>[^<]*<\/code><\/pre>/", "<pre><code>other code</code></pre>", $str);

echo $str;

实施例: https://eval.in/669811

更新

以下有点脆弱,但可能有用。

$parts = preg_split("/<pre><code>|<\/code><\/pre>/", $str);

$str = "";
for ($i=0;$i < count($parts);$i++) {
     if ($i%2 == 0) {
         $str .= ($i != 0?"</code></pre>":"").strip_tags($parts[$i]);
     } else {
          $str .= "<pre><code>".htmlentities($parts[$i]);
     }
}

print_r($str);

基本上它假定当你按<pre><code></code></pre>分割时,偶数条目在代码部分之外,奇数条目在里面。当然,当HTML不能正确平衡时,这会中断,但大多数事情都会这样做。

code标记之外的内容会删除其标记,code标签内的内容会htmlentities保留标记。

示例:https://eval.in/671005

答案 1 :(得分:0)

1.为什么要在第一时间将html插入数据库 2.split常用文本到数据库中的其他列 3.不要将html插入数据库 4.不要在php中使用html代码 5.我使用http://www.smarty.net/分割文件,如main.php(code)main.tpl(html代码)。
然后你可以在模板中形成html,如

 $("#file-5").on('change',function() {
 var fileList = this.files; 
 for(var i = 0; i < fileList.length; i++)
 {
      //get a blob 
      var t = window.URL || window.webkitURL;
      var objectUrl = t.createObjectURL(fileList[i]);
      $('#imgs').append('<img src="' + objectUrl + '" />');

      j = i+1;
      if(j % 3 == 0)
      {
        $('#imgs').append('<br>');
      }

 }
});