从输入中删除样式

时间:2018-02-16 19:57:46

标签: php

我有一个WYSIWG,我知道人们会复制并粘贴到。当我在服务器端执行操作时,我想要删除标记之间的所有内容,以便它显示{j} <p></p><span></span>

我的测试复制/粘贴看起来像:

<p style="color: rgb(26, 26, 26); font-family: &quot;Open Sans&quot;, Helvetica, Arial, sans-serif; font-size: 14px; font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-weight: 400;">"<span style="font-weight: 700;">Nancy</span>"</p><p style="color: rgb(26, 26, 26); font-family: &quot;Open Sans&quot;, Helvetica, Arial, sans-serif; font-size: 14px; font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-weight: 400;">5 rounds for time of:<br>400 meter run<br>95 pound Overhead squat, 15 reps</p>

我看到了这个:

preg_replace('/(<[^>]+) style=".*?"/i', '$1', $input )

但它返回:

<pOpen Sans", Helvetica, Arial, sans-serif; font-size: 14px; font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-weight: 400;">"<span>Nancy</span>"</p><pOpen Sans", Helvetica, Arial, sans-serif; font-size: 14px; font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-weight: 400;">5 rounds for time of:<br>400 meter run<br>95 pound Overhead squat, 15 reps</p>

所以它剥离了Style:部分,但留下了实际的样式。

2 个答案:

答案 0 :(得分:0)

您可以尝试使用仅保留标记的正则表达式:

$input = preg_replace('~(<[a-z]+)[^>]+~', '$1', $input );

答案 1 :(得分:0)

如果您想删除完整的样式标记,这应该适合您:

preg_replace('/(<[^>]+) style=".*?"/i', '$1', $input);

但是,如果要将这些文件保存到某个数据库中,您可能需要对代码进行更多检查。

您也可以(在大多数WYSIWYG编辑器中)选择用户可以使用的功能。因此,如果您只想允许特定的html标记和属性,您应该能够设置它。

这不会在插入数据库之前替换代码检查,因为您当然可以关闭java并插入所需的内容。