我有使用ckeditor生成的html文本,在我的文本中有某些非HTML标记未被显示,因为它被视为HTML标记。
我想将所有非HTML标记替换为html实体。
我使用str_replace完成了大部分标记,但现在我有大约100个不同的标记,如<ip address>, <user id>, <all |ORACLE_SID>
。
任何人都可以帮助我使用正则表达式或帮助我的任何东西。
我已尝试DOMDocument
将这些其他代码视为无效代码并发出警告。
我尝试过正则表达式,但这样做风险太大,因为它可以将我的HTML标记转换为HTML实体。
大家好,我不想删除这些非HTML标签,而是我想要的 通过将它们转换为HTML实体来保存它们,以便它们可以 显示在屏幕上。
答案 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;