很抱歉无法使标题更清晰。
基本上我可以在我的页面上键入文本,其中所有HTML-TAGS都被删除,除了我允许的几个。
我想要的是能够输入我想要的所有标签,以纯文本形式显示,但前提是它们在'code'标签内。我知道我可能会使用htmlentities,但我怎么能只影响'code'标签内的标签呢?
可以吗?
先谢谢你们。
例如,我有$ _POST ['content'],这是网页上显示的内容。并且是我遇到问题的所有输出的变量。
假设我发布了一段文字,除了少数几个标签外,所有标签都会被删除,包括“代码”标签。
在代码标记中我放置了代码,例如HTML信息,但是这应该显示为文本。如何将HTML标记转义为仅在“代码”标记中以纯文本形式显示?
以下是我可以输入的示例:
Hi there, this is some text and this is a picture <img ... />.
Below I will show you the code how to do this image:
<code>
<img src="" />
</code>
标签内的所有内容都应显示为纯文本,这样它们就不会从PHP的strip_tags中删除,而只会从标签中的html标签中删除。
答案 0 :(得分:0)
如果它是严格的代码标签,那么它可以很容易地完成。
首先,通过“' or '
”的任何出现来爆炸你的字符串。
例如,字符串:
Hello <code> World </code>
应成为4项数组:{Hello,,World!,
}
现在循环遍历从0开始的数组并递增4.您点击的每个元素,运行当前脚本(删除除允许的标记之外的所有标记)。 现在循环遍历从2开始的数组并以4递增。您点击的每个元素,只需在其上运行htmlspecialentities。
内爆您的数组,现在您有一个字符串,其中标记内的任何内容都已完全清理,标记之外的任何内容都会被部分清理。
答案 1 :(得分:0)
以下是一些示例代码:
$parsethis = '';
$parsethis .= "Hi there, this is some text and this is a picture <img src='http://www.google.no/images/srpr/logo3w.png' />\n";
$parsethis .= "Below I will show you the code how to do this image:\n";
$parsethis .= "\n";
$parsethis .= "<code>\n";
$parsethis .= " <img src='http://www.google.no/images/srpr/logo3w.png' />\n";
$parsethis .= "</code>\n";
$pattern = '#(<code[^>]*>(.*?)</code>)#si';
$finalstring = preg_replace_callback($pattern, "handle_code_tag", $parsethis);
echo $finalstring;
function handle_code_tag($matches) {
$ret = '<pre>';
$ret .= str_replace(array('<', '>'), array('<', '>'), $matches[2]);
$ret .= '</pre>';
return $ret;
}
它的作用:
首先使用preg_replace_callback
我匹配<code></code
中的所有代码,将其发送到我的回调函数handle_code_tag
,该函数会转义内容中的所有小于和大于标签。匹配数组将在1中包含完整匹配的字符串,而(.*?) in [2].
#si` s 的匹配意味着匹配。跨线刹和 i 表示不区分大麻
渲染的输出在我的浏览器中如下所示:
答案 2 :(得分:0)
这是我发现的解决方案,它对我来说非常有效。 谢谢大家的帮助!
function code_entities($matches) {
return str_replace($matches[1],htmlentities($matches[1]),$matches[0]);
}
$content = preg_replace_callback('/<code.*?>(.*?)<\/code>/imsu',code_entities, $_POST['content']);