【问题标题】:strings after "<" cannot be seen when using PHP strip_tags function使用 PHP strip_tags 函数时看不到“<”之后的字符串
【发布时间】:2011-12-16 02:19:45
【问题描述】:

假设 $reply = "blah blah blah >

但是,当我使用“strip_tags”剥离$reply中的每个html和php标签时,“

我认为 strip_tags 搞混了。

有什么办法可以解决这个问题吗?

【问题讨论】:

  • 不,除非你放弃使用 strip_tags
  • 哦,我明白了.. 那么我应该使用 str_replace 而不是 strip_tags。谢谢!
  • @MintakSon:很可能,你应该使用htmlspecialchars

标签: php strip-tags


【解决方案1】:

如果您在其上调用strip_tags(),您会将字符串视为HTML。因此,这些实体在使用strip_tags()之前应编码为&amp;lt;&amp;gt;,否则将被视为HTML标签的开始和结束。

您需要对这些实体进行编码。那么使用strip_tags() 应该是安全的

【讨论】:

  • +1,但是在htmlspecialchars 处理之后,strip_tags 还可以做什么?
  • 哦!这是非常好的功能!谢谢你的建议。祝你有美好的一天,亚历克斯 :)
  • 我认为使用 reg_expr -> htmlspecialchars -> strip_tags 是解决问题的最佳方法
  • 正则表达式什么时候开始发挥作用;)。 Jon 有一个很好的观点,即同时使用 strip_tags 和 htmlspecialchars() 将是多余的。矫枉过正,但它会工作。
【解决方案2】:

有趣。我会亲自对可接受的部分进行实体编码,然后运行条形标签或 htmlentities()...

<?php
// Initial user-input
$reply = "blah blah blah >< blah blah blah";

// Allow the emoticon you mentioned
$reply = str_replace('><', '&gt;&lt;', $reply);

// Then strip tags
$reply = strip_tags($reply);

当然,如果你只是 htmlentites($reply),那么这一切都没有实际意义,如果他们愿意的话,让用户放在括号中......

【讨论】:

  • s/htmlentities/htmlspecialchars/ - 在 UTF8 时代,没有充分的理由将元音变音之类的东西编码为 html 实体。
  • 好点。我总是使用 htmlentities($string, ENT_COMPAT, 'UTF-8'),但主要是因为那是我看到其他人为 i18n 所做的。只使用 htmlspecialchars() 会更好吗?
  • @landons:如果你的整个堆栈都可以处理 UTF-8(正如 ThiefMaster 所说,这几乎是 2012 年),那么 htmlentities 就更臃肿了。另外,它使 HTML 不可读。
  • @landons: htmlspecialchars() 只对真正需要的字符进行编码,以防止它们具有特殊含义。
  • @landons 诸如&lt;strong&gt;&lt;em&gt;Whoops!&lt;/em&gt;&lt;/strong&gt;之类的HTML呢?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-03-11
  • 2012-12-04
  • 1970-01-01
  • 1970-01-01
  • 2016-03-15
相关资源
最近更新 更多