- Created:
- Updated:
- Fairycat
用laravel的Blade写后台,ckeditor无法显示html标签的原因
每次引入一个富文本编辑器的时候,因为经常写代码,都会留意写入代码会如何,被转义了各种问题。
这次用ckeditor,写入一段代码后,提交正常,数据库内容正常,可是再编辑的时候,富文本编辑器出问题了,html标签各种bug。
肯定是转义的问题了。本以为是编辑器设置出的问题,官方文档都是英文,而且很多,看不下去。
再想想,ckeditor这么流行的一个编辑器,不可能写不了代码,搜索了一些文章,一句话:文本域的内容要转义。这就发现问题了,而且,这个地方我之前摔过,又摔一回。这次做个记录。
laravel默认带的Balde模板,{{}}语句通过htmlentities处理。
相关内容:
默认情况下,Blade 的
{{ }}
语句已经通过 PHP 的htmlentities
函数处理以避免 XSS 攻击
htmlentities转换所有的html标记,htmlspecialchars只格式化& ' " < 和 > 这几个特殊符号
写个内容测试一下:
<html>
<head>
</head>
<body>
<div>
<b>Done!</b>
</div>
</body>
</html>
数据库内容:
<html>
<head>
</head>
<body>
<div>
<b>Done!</b>
</div>
</body>
</html>
htmlentities结果(对已经转义存入数据库的内容,用这个处理跟没处理一样的):
<html>
<head>
</head>
<body>
<div>
<b>Done!</b>
</div>
</body>
</html>
浏览器浏览:
<html> <head> </head> <body> <div> <b>Done!</b> </div> </body> </html>
htmlspecialchars结果(已经转义的html标签,对&符号再转义,这才是想要的结果):
&lt;html&gt;
&lt;head&gt;
&lt;/head&gt;
&lt;body&gt;
&lt;div&gt;
&lt;b&gt;Done!&lt;/b&gt;
&lt;/div&gt;
&lt;/body&gt;
&lt;/html&gt;
浏览器浏览:
<html> <head> </head> <body> <div> <b>Done!</b> </div> </body> </html>
看得出来,文本域的内容应该用后者。
Blade模板语句可以直接写php:
<?php echo htmlspecialchars($content); ?>
或者:
{!!htmlspecialchars($content)!!}