首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >用php移除<script>和其他标签

用php移除<script>和其他标签
EN

Stack Overflow用户
提问于 2012-08-19 03:04:02
回答 2查看 315关注 0票数 0

对于一个小的一页的内容管理系统,我想取代script和其他标签,人们可能会使用坏的意图。

我试过strip_tagspreg_replace,但由于某种原因它不能工作。

一页CMS有6个要编辑的字段。这些文件保存在纯文本文件中。当我编辑其中一个时,我需要它来删除所有的标签,如scriptembedobject<iframe>和其他标签。

我已经检查过HTML Purifier了,但我不明白它是如何工作的,因为我对php不是很熟悉。看起来有点太大了,我想我的需求。

下面是代码(这里我尝试从名为newscontent的文本区域的script标记中删除标记):

代码语言:javascript
运行
复制
<?php
if (isset($_POST['edit'])) {

    $newscontent = preg_replace('/<script.+?<\/script>/im', '', $newscontent);

    if (file_put_contents('title.txt',          utf8_encode($_POST['title']))       !== FALSE &&
        file_put_contents('subtitle.txt',       utf8_encode($_POST['subtitle']))    !== FALSE &&
        file_put_contents('datum.txt',          utf8_encode($_POST['datum']))       !== FALSE &&
        file_put_contents('time.txt',           utf8_encode($_POST['time']))        !== FALSE &&
        file_put_contents('timemin.txt',        utf8_encode($_POST['timemin']))     !== FALSE &&
        file_put_contents('newscontent.txt',    utf8_encode($_POST['newscontent'])) !== FALSE
    )
        echo '<p class="succes">Your changes are saved</p>', "\n";
}
$title          = utf8_decode(file_get_contents('title.txt'));
$subtitle       = utf8_decode(file_get_contents('subtitle.txt'));
$datum          = utf8_decode(file_get_contents('datum.txt'));
$time           = utf8_decode(file_get_contents('time.txt'));
$timemin        = utf8_decode(file_get_contents('timemin.txt'));
$newscontent    = utf8_decode(file_get_contents('newscontent.txt'));
?>
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-08-19 03:12:16

您的代码不起作用,因为您正在对变量$newscontent执行替换,但是将$_POST['newscontent']写入文件。我猜你已经开启了注册全局变量(这是不好的),否则会产生一个错误。

我建议您坚持使用HTMLPurifier。如果人们有“不好的意图”,他们可能会在文本中添加很多很多不好的东西,而你的方法甚至没有触及到表面。例如,如果你要修复你的代码,它不会阻止人们添加类似这样的东西:

代码语言:javascript
运行
复制
<img src="http://www.google.com/logo.gif" onload="javascript:bad stuff here" />

更不用说不同字符集的复杂性了。

票数 3
EN

Stack Overflow用户

发布于 2012-08-19 03:07:29

<是正则表达式中的特殊字符,您需要对其进行转义。

代码语言:javascript
运行
复制
    $newscontent = preg_replace('/\<(script|object|embed).+?\<\/\1\>/im', '', $newscontent);
票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12021434

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档