更新了问题,不幸的是我之前没有解释过。
详细信息:
我有一个包含多行的数据库,每行有大量数据,但每个数据的共同点是随机顺序的<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>
标记内的代码显示为纯文本,您知道我必须将每个"<"
与"<"
和">"
转换为{{1但问题是pre标签之外还有其他标签。如果我使用">"
,它会将所有标签显示为纯文本,甚至是h2标签和预标签。
所以我想要一种方法只使用htmlspecialchars($string);
函数来预标记之间的数据。
答案 0 :(得分:0)
我相信以下内容可能会奏效:
$str = preg_replace("/<pre><code>[^<]*<\/code><\/pre>/", "<pre><code>other code</code></pre>", $str);
echo $str;
更新
以下有点脆弱,但可能有用。
$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
保留标记。
答案 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>');
}
}
});