本人新手,用PHP&MySQL写了个文章发布系统,富文本编辑器使用的是Kindeditor。
症状说明:
我想通过编辑器发些代码,添加文章时可以正常发代码,包括 < 也被正常转义为 < ,保存到数据库中也是 <。
但如果修改文章,从数据库中读取到的 < 会被 KindEditor 自动转义为 < ,导致内容无法正确显示。
以下是 Kindeditor 的调用代码
KE.show({ id : 'content', urlType: 'absolute', imageUploadJson : '../../upload_img.php', //相对于kindeditor\plugins\image\image.html fileManagerJson : '../../select_img.php', //相对于kindeditor\plugins\file_manager\file_manager.html allowFileManager : true, });
数据是直接通过 $_POST['content'] 提交到 MySQL 中的,没有任何转义。
翻过 oschina 的帖子,也有人提出类似的问题,红署哥哥的回答是把 & 转义为 & ,于是我就使用PHP的 str_replace()函数把&转义成&。
这样 < 就变成了 < ,这倒是可以解决 Kindeditor 自动转义 < 的问题,但如果我打一个空格也就是 也变成了   ,无法正常显示空格。
究竟该如何解决特殊字符转义的问题呢?
oschina 的转换方法如下,确保无误( 转成   还是空格的)
/** * 格式化HTML文本 * @param content * @return */ public static String rhtml(String content) { if(StringUtils.isBlank(content)) return content; String html = content; html = StringUtils.replace(html, "&", "&"); html = StringUtils.replace(html, "<", "<"); html = StringUtils.replace(html, ">", ">"); return html; }######
把 & 转换成 & 再保存入数据库,在前台输出时需要重新 str_replace('&', '&', $content);
但在 kindeditor 编辑器中不需要,好像它会自己把 & 转换成 & ,我修改文章时看 kindeditor 中的源码 & 都变成了&
别的编辑器也是这样的吗? kindeditor 为什么这样转换呢,感觉麻烦了许多,是不是有什么好处啊?
######
我是这么处理的:
$content = str_replace(' ','@@@#@@',$content);
$content = str_replace(' ',' ',$content);
$content = str_replace('@@@#@@',' ',$content);
因为KE将连续的空格自动解析为: 空格+ 但是单个空格又自动转换为 ..
所以这个看起来比较复杂!
######试试 @红薯 就这个连续空格的问题是否有处理?
红 薯
红 薯 (3个空格)
红 薯(4个空格)
红 薯(5个空格)
###### 红 薯###### 红 薯######已经用上了,感谢!
function kindhtml($html,$jc='j'){ if($jc=='j'){ $html = str_replace(' ', ' ', $html); $html = str_replace('>', '>', $html); $html = str_replace('<', '<', $html); } //仅用在非kindeditor文本编辑器页面使用,因为kindeditor文本编辑器会自动执行下面这类转换 if($jc=='c'){ $html = str_replace(' ', ' ', $html); $html = str_replace('>', '>', $html); $html = str_replace('<', '<', $html); } }
######
求答案
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。