【问题标题】:PHP Preg replace to remove all xmlPHP Preg 替换以删除所有 xml
【发布时间】:2019-11-30 10:06:55
【问题描述】:

我的 UI 中有一个文本区域,我想过滤掉用户使用 preg_replace 输入的所有 xml(包括 html)文本。我需要一些帮助。

例如:

Emailed user sam at 12:15 PM
<details><email>sam@sam.com</email></details>

preg_replace 之后:

Emailed user sam at 12:15 PM

除此之外,任何指向 preg_replace 正则表达式的指针都会很棒。我尝试在 preg_replace 中使用一些 java 正则表达式(我是 PHP 新手),但发现它不起作用。我不确定我的正则表达式是否错误或 preg_replace 使用了不同类型的正则表达式。

非常感谢您的所有帮助。

【问题讨论】:

  • strip_tags() 有什么问题?
  • 显示你迄今为止尝试过的内容
  • @Raidenace 它将删除任何标签 iirc。介意展示它不会剥离的标签示例吗?
  • @ColeJohnson 好吧,也许应该改写,但这是我的回答(OP 说它是 PHP 的新手)。使用 strip_tags()。
  • @WebnetMobile.com:我的立场是正确的。 +1 一个简单的解决方案。

标签: php regex preg-replace


【解决方案1】:

mixed preg_replace ( mixed $pattern , mixed $replacement , mixed $subject [, int $limit = -1 [, int &amp;$count ]] )

因此,在大多数情况下,类似以下的内容会起作用,

$str_out = preg_replace('/<[\/]{0,1}\w[^>]*>/g', '', $str_in);

'/&lt;[\/]{0,1}\w[^&gt;]*&gt;/g'stuff> 的正则表达式。如果属性中有 >,它将失败(即 &lt;name blah="&gt;hello"&gt; 将导致 hello"&gt;

虽然strip_tags 是原生的,所以会更快。记住strip_tags 的参数是不能剥离的东西


编辑:如果你也想去掉标签之间的内容,那么正则表达式是'/&lt;\w[^&gt;]*&gt;[\s\S]*?&lt;\/\w[^&gt;]*&gt;/g',但这会在更多情况下失败(即严重关闭/嵌套标签),所以你可能想先运行它然后上面的结果,以确保。

编辑:拼写

【讨论】:

  • 另外,如果是为了确保人们没有提交坏事,请在 while 循环中执行此操作,直到它停止更改以确保人们不会做奇怪的事情,期望字符串的删除位创建新标签,即 mytag>
猜你喜欢
  • 1970-01-01
  • 2012-01-26
  • 2010-12-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-01-05
  • 1970-01-01
  • 2017-11-13
相关资源
最近更新 更多