fairycat

Updated:
Created:
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>

数据库内容:

&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;

htmlentities结果(对已经转义存入数据库的内容,用这个处理跟没处理一样的):

&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>

htmlspecialchars结果(已经转义的html标签,对&符号再转义,这才是想要的结果):

&amp;lt;html&amp;gt;
&amp;lt;head&amp;gt;
&amp;lt;/head&amp;gt;
&amp;lt;body&amp;gt;
    &amp;lt;div&amp;gt;
        &amp;lt;b&amp;gt;Done!&amp;lt;/b&amp;gt;
    &amp;lt;/div&amp;gt;
&amp;lt;/body&amp;gt;
&amp;lt;/html&amp;gt;

浏览器浏览:

&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;

看得出来,文本域的内容应该用后者。

Blade模板语句可以直接写php:

<?php echo htmlspecialchars($content); ?>

或者:

{!!htmlspecialchars($content)!!}

 

评论

Name

Email

Website

Subject