我有这个HTML代码:
<p style="padding:0px;">
<strong style="padding:0;margin:0;">hello</strong>
</p>
但它应该变成(对于所有可能的html标签):
<p>
<strong>hello</strong>
</p>
改编自我对类似问题的回答
$text = '<p style="padding:0px;"><strong style="padding:0;margin:0;">hello</strong></p>';
echo preg_replace("/<([a-z][a-z0-9]*)[^>]*?(\/?)>/si",'<$1$2>', $text);
// <p><strong>hello</strong></p>
RegExp细分:
/ # Start Pattern
< # Match '<' at beginning of tags
( # Start Capture Group $1 - Tag Name
[a-z] # Match 'a' through 'z'
[a-z0-9]* # Match 'a' through 'z' or '0' through '9' zero or more times
) # End Capture Group
[^>]*? # Match anything other than '>', Zero or More times, not-greedy (wont eat the /)
(\/?) # Capture Group $2 - '/' if it is there
> # Match '>'
/is # End Pattern - Case Insensitive & Multi-line ability
添加一些引号,并使用替换文本,<$1$2>
它应该删除标记名之后的所有文本,直到标记结尾/>
或just 为止>
。
请注意, 这不一定适用于 所有 输入,因为Anti-HTML + RegExp会告诉您。有一些后备功能,最明显的是<p style=">">
会<p>">
失败,还有其他一些坏的问题…我建议将Zend_Filter_StripTags视为PHP中更全面的标签/属性过滤器
问题内容: 我对正则表达式不太满意,但是对于PHP,我想从TinyMCE返回的字符串中的HTML标记中删除属性。 所以换成香草。 我将如何通过类似功能来实现这一目标? 问题答案: 务实的正则表达式将在所有合理的情况下解决此问题。不是第一个捕获组的匹配部分应删除,如下所示: 匹配一个后跟一个或多个“ not ”的字符,直到我们到达该部分为止。该更令其一起工作。将此匹配替换为,这是捕获的组。如果标记不
问题内容: 我想显示数据库条目的前110个字符。到目前为止很简单: 但是上面的条目中包含由客户端输入的html代码。因此它显示: 显然没有好处。 我只想剥离所有html代码,所以我需要从数据库条目中删除<和>之间的所有内容,然后显示前100个字符。 有任何想法吗? 问题答案: 采用
问题内容: 在我的数据集中,我有一个字段,用于存储用HTML标记的文本。通用格式如下: 我可以尝试通过以下方法解决问题: 但是,这不是严格的规则,因为 某些条目违反了W3C标准, 并且不包含标签。更糟的是, 可能会缺少结束标记 。因此,我需要为每个可能存在的开始和结束标记包括函数。 我想知道是否有比使用多个嵌套函数更好的方法来完成此任务。不幸的是,我在这种环境中只能使用的语言是SQL和Visual
我在使用一段时间的脚本时遇到了问题,在遇到这个问题之前它一直对我有效。 我有一个脚本,我想用它从html源代码中删除所有p html标记。该脚本确实可以工作,部分原因是它只删除了一些p标记,但遗漏了一些。 我不明白为什么会这样。 脚本返回 省略了两个p标签... 你能帮我找出为什么它跳过了一些标签吗
你知道在构建过程中给元素分配属性是非常有帮助和高效的。基本上,元素是一个可以分配给任何东西的对象: 在测试中,这些实际上运行良好,返回了可靠的结果; 我寻求一种方法来详细观察和操纵这些动作。 例如,我想得到一个所有赋值的对象: 以及一种删除所有的方法(仅指定了插件javascript,而不是默认值,例如,,等等)
什么是正确的方法来删除只有HTML标签(保留所有自定义/未知的标签)与JSOUP(不是正则表达式)? 预期输入: 预期产出: 我尝试使用白名单清洁剂。none(),但它也会删除自定义标记。 我也尝试过: 但是它也删除了自定义标签。 这个答案对我不好,因为自定义标记的数量是无限的。