Kindeditor 修改内容时如何不让 < 被自动转义

OSC老司机 发布于 2011/08/15 18:10
阅读 11K+
收藏 1

本人新手,用PHP&MySQL写了个文章发布系统,富文本编辑器使用的是Kindeditor。

症状说明:

我想通过编辑器发些代码,添加文章时可以正常发代码,包括 < 也被正常转义为 &lt ,保存到数据库中也是 &lt。

但如果修改文章,从数据库中读取到的 &lt 会被 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 的帖子,也有人提出类似的问题,红署哥哥的回答是把 & 转义为 &amp; ,于是我就使用PHP的 str_replace()函数把&转义成&amp;。

这样 &lt 就变成了 &amp;lt ,这倒是可以解决 Kindeditor 自动转义 < 的问题,但如果我打一个空格也就是 &nbsp; 也变成了 &amp;nbsp ,无法正常显示空格。

究竟该如何解决特殊字符转义的问题呢?

加载中
1
红薯
红薯
oschina 的转换方法如下,确保无误(&nbsp; 转成 &amp;nbsp 还是空格的)
/**
 * 格式化HTML文本
 * @param content
 * @return
 */
public static String rhtml(String content) {
	if(StringUtils.isBlank(content))
		return content;
	String html = content;
	html = StringUtils.replace(html, "&", "&amp;");
	html = StringUtils.replace(html, "<", "&lt;");
	html = StringUtils.replace(html, ">", "&gt;");
	return html;
}
0
OSC老司机
OSC老司机

把 & 转换成 &amp; 再保存入数据库,在前台输出时需要重新 str_replace('&amp;', '&', $content);

但在 kindeditor 编辑器中不需要,好像它会自己把 &amp; 转换成 & ,我修改文章时看 kindeditor 中的源码 &amp; 都变成了&

别的编辑器也是这样的吗? kindeditor 为什么这样转换呢,感觉麻烦了许多,是不是有什么好处啊?

 

0
指点江山
指点江山

我是这么处理的:

 $content = str_replace(' &nbsp;','@@@#@@',$content);

$content = str_replace('&nbsp;',' ',$content);

$content = str_replace('@@@#@@',' &nbsp;',$content);

因为KE将连续的空格自动解析为: 空格+&nbsp; 但是单个空格又自动转换为&nbsp; ..

所以这个看起来比较复杂!

0
指点江山
指点江山

试试 @红薯 就这个连续空格的问题是否有处理?

红 薯

红   薯 (3个空格)

红    薯(4个空格)

红     薯(5个空格)

0
若水191
若水191
红     薯
0
若水191
若水191
红            薯
0
Elileo
Elileo

已经用上了,感谢!

function kindhtml($html,$jc='j'){
 if($jc=='j'){
  $html = str_replace('&nbsp;', '&amp;nbsp;', $html);
  $html = str_replace('&gt;', '&amp;gt;', $html);
  $html = str_replace('&lt;', '&amp;lt;', $html);
 }
 //仅用在非kindeditor文本编辑器页面使用,因为kindeditor文本编辑器会自动执行下面这类转换
 if($jc=='c'){
  $html = str_replace('&nbsp;', '&amp;nbsp;', $html);
  $html = str_replace('&gt;', '&amp;gt;', $html);
  $html = str_replace('&lt;', '&amp;lt;', $html);
 }
}



返回顶部
顶部