有没有办法解码html实体,同时离开<br,+“</<p>,单独使用PHP?</p>

时间:2008-10-14 12:26:11

标签: php tinymce wysiwyg

我在我的网站上使用tinyMCE作为我的文本编辑器,我希望在将文本保存到我的数据库之前重新格式化文本(将&amp; rsquo;标记更改为'然后更改为&amp;#39;)。我找不到使用tinyMCe这样做的简单方法,并使用htmlentities()更改包括&lt;&gt;在内的所有内容。有什么想法吗?

5 个答案:

答案 0 :(得分:8)

您可以像下面这样使用strip_tags($str, $allowed_tags)

$txt = strip_tags($txt, '<p><a><br>');

答案 1 :(得分:1)

直接来自PHP手册:strip_tags()

$ allowable_tags变量允许您定义允许标记的字符串。您可以使用此可选的第二个参数来指定不应剥离的标记。

答案 2 :(得分:1)

tinyMCE允许您指定允许标签的“白名单”,这将删除列表中未包含的任何标签:

tinyMCE.init({
  ...  //  other init instructions
  valid_elements: 'p,a[href],br',
});

在我们自己的项目中,我们将此白名单与内部转换器结合在一起,将HTML转换为数据库的BB格式,然后在需要打印到页面时再次返回HTML。


更新:既然问题已被编辑为更清晰,我可以看到上面输入的内容无法解决问题。提问者想要的是一种转换字符实体的方法,同时保持HTML标签不受影响。

在我们自己的项目中,我们使用的内部转换器完成了这项工作。从HTML转换为内部表示时,编码字符将转换为字符本身;转换回HTML时,会编码更高的字符。这是以逐个字符,类似解析器的方式完成的。然而,这种方法可能太复杂,无法满足您的需求。

许多人使用的快捷方式是使用一系列正则表达式,但您可能会发现很难以这样的方式排列正则表达式,以便同时保留&符号&和分号;时间翻译字符实体&nbsp;。你还会发现要覆盖每个可能的角色实体,你需要几十个正则表达式。

呃,所以我实际上没有答案。

答案 3 :(得分:1)

这取决于您要保留的标签。我假设你想要使用TinyMCE的所有功能,所以文本可以包括像表格结构的nexted标签。然后没有简单的方法(一种方法是使用PHP Document Object Model来解析html文档。

但是TinyMCE有几个configuration选项用于实体编码。我建议您查看TinyMCE手册中的配置选项entity_encoding entitiesencoding

答案 4 :(得分:1)

TinyMCE和FCK都有大量的配置选项。文档可能很难搜索,但值得付出努力。

TinyMCE允许您使用'entity_encoding'选项指定实体编码。可以在创建编辑器时指定它。它可能看起来像这样......

tinyMCE.init({
entity_encoding:'数字'
});

这会改变像&amp; rsquo这样的标签。进入&amp;#39;。