如何用html实体或htmlentities()替换非HTML标签或自定义标签?

时间:2017-09-13 09:27:20

标签: php html regex

我有使用ckeditor生成的html文本,在我的文本中有某些非HTML标记未被显示,因为它被视为HTML标记。

我想将所有非HTML标记替换为html实体。 我使用str_replace完成了大部分标记,但现在我有大约100个不同的标记,如<ip address>, <user id>, <all |ORACLE_SID>

任何人都可以帮助我使用正则表达式或帮助我的任何东西。

我已尝试DOMDocument将这些其他代码视为无效代码并发出警告。

我尝试过正则表达式,但这样做风险太大,因为它可以将我的HTML标记转换为HTML实体。

  

大家好,我不想删除这些非HTML标签,而是我想要的   通过将它们转换为HTML实体来保存它们,以便它们可以   显示在屏幕上。

3 个答案:

答案 0 :(得分:0)

我实际上并没有想要删除标签但是使用

echo htmlentities('<127.0.0.1>');

它会在打开,关闭插入符号时输出ip地址。

答案 1 :(得分:0)

如果你想要htmlentities忽略你的自定义标签碰巧在html中具有特殊含义,那么不,我不认为htmlentities可以在该级别上自定义,你将不得不使用另一个html编码功能。但如果您的问题是您有太多的str_replace调用,请改用strtr。例如,这一切:

$html=str_replace('<ip address>','127.0.0.1',str_replace('<user id>','1337',str_replace('<all |ORACLE_SID>','839781233213',$html)));

可以替换为对strtr的这1次调用:

$html=strtr($html,array(
    '<ip address>'=>'127.0.0.1',
    '<user id>'=>'1337',
    '<all |ORACLE_SID>'=>'839781233213',
));

导致更漂亮的代码和更小的代码以及更快的执行,并避免了1替换的替换键是另一个替换值的一部分的问题(在这种情况下,str_replace将替换第一个的替换值,但是strtr不会)。

答案 2 :(得分:0)

CKEditor可能存在问题,它将字符'&lt;','&gt;','/'分别编码为'&amp;#60','&amp;#62','&amp;#47'。所以这可以解决问题:

CKEDITOR.config.basicEntities = false;
CKEDITOR.config.entities = false;
CKEDITOR.config.entities_greek = false;
CKEDITOR.config.entities_latin = false;
CKEDITOR.config.htmlEncodeOutput = false;
CKEDITOR.config.entities_processNumerical = false;