试图剥离字符:/和\

时间:2012-12-23 19:21:12

标签: php

我在尝试删除/和\字符时遇到问题。当我尝试剥离时使用\它剥离\但当我尝试///时它根本不剥离。

function stripinname( $text )
{
$text = preg_replace(
    array(
        '/\|/','/\"/','/\</','/\>/','/\s[\s]+/','/^[\-]+/','/[\-]+$/','/\%/','/\\\\/','/\////','/\@/','/\&/','/\:/','/\;/','/\-/',
        '@<head[^>]*?>.*?</head>@siu',
        '@<style[^>]*?>.*?</style>@siu',
        '@<script[^>]*?.*?</script>@siu',
        '@<object[^>]*?.*?</object>@siu',
        '@<embed[^>]*?.*?</embed>@siu',
        '@<applet[^>]*?.*?</applet>@siu',
        '@<noframes[^>]*?.*?</noframes>@siu',
        '@<noscript[^>]*?.*?</noscript>@siu',
        '@<noembed[^>]*?.*?</noembed>@siu',
      // Add line breaks before and after blocks
        '@</?((address)|(blockquote)|(center)|(del))@iu',
        '@</?((div)|(h[1-9])|(ins)|(isindex)|(p)|(pre))@iu',
        '@</?((dir)|(dl)|(dt)|(dd)|(li)|(menu)|(ol)|(ul))@iu',
        '@</?((table)|(th)|(td)|(caption))@iu',
        '@</?((form)|(button)|(fieldset)|(legend)|(input))@iu',
        '@</?((label)|(select)|(optgroup)|(option)|(textarea))@iu',
        '@</?((frameset)|(frame)|(iframe))@iu',
    ),
    array(
        ' ',' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ',"$0", "$0", "$0", "$0", "$0", "$0","$0", "$0",), $text );

// you can exclude some html tags here, in this case B and A tags        
return strip_tags($text);
}

1 个答案:

答案 0 :(得分:3)

不要这样做。

您知道MSIE是否支持使用behavior:url()从CSS加载javascript? 您知道我们可以在javascript:代码中执行<img>个网址吗?

使用其他人的HTML清理程序; HTML Purifier没问题 - 它有很多用户,每当有人发现其中的错误时,它就会得到修复,所有人使用它会带来好处。

如果找到它,你的代码中的任何错误(就像我现在正在看的那个)都会被修复。

我会找到一种方式。

我一直都这么做。

编辑:

您的代码不起作用的原因是您不理解它。在这样的领域不理解你的程序与安全相关的问题来自哪里。既然你已经决定我只是“大肆宣传”,那你就忽视了我的建议。这样做会对整个软件开发人员/工程师行业造成伤害:

  1. 你不懂正则表达式; ,/,匹配斜杠。
  2. 您不理解PHP的preg_replace()实际上如何匹配正则表达式:要匹配所有斜杠,您需要全局匹配它们,如,/,g
  3. 您不明白/会在HTML标记内合法显示。通过替换它,我实际上可以创建您试图剥离的HTML标记。
  4. 您认为strip_tags()能够完成它所说的内容。它没有。
  5. 你错误地写了你的论点。你认为自己分裂的一些东西正在被自己取代。
  6. 您没有检查错误。 preg_replace()可以返回NULL
  7. 你有这么多狂妄自大;你认为你已经掌握了这个伟大的演出的秘密,它只涉及到关于stackoverflow的问题以及从PHP wiki复制/粘贴示例。 您需要停止此 。编写无错误的程序需要理解每个单词,虽然我很乐意帮助你学习如何做到这一点,但我必须坚持你的行为负责任。

    你应该有道德感,避免编写你还没有足够经验的代码。

    从信誉良好的来源获取这些惯例,并从其他人的错误中吸取教训;您的客户/雇主/等不值得您的错误;我们的行业不应该受到这种废话。