【问题标题】:Updating WYSIWYG summernote content breaks the images更新所见即所得的 Summernote 内容会破坏图像
【发布时间】:2019-12-03 12:21:42
【问题描述】:

我使用的是summernote WYSIWYG 编辑器,创建或查看其内容没有任何问题,但在更新内容时确实会出现损坏的图像。不仅是一个断开的链接,而且还有一个 0 字节的图像被保存。

当我尝试更新它时,由于爆炸功能,我得到了未定义的偏移量 1 错误,但是当我尝试修复它时,我得到了损坏的图像问题。

这是我的文本编辑器内容解析器:

/*
     * @param $content is request data from wysiwyg
     * @param $directory is where to save the images
     */
    public function parseTextEditorContent($content, $directory)
    {
        $dom = new \domdocument();
        $dom->loadHtml($content, LIBXML_HTML_NOIMPLIED | LIBXML_HTML_NODEFDTD);
        $images = $dom->getelementsbytagname('img');

        //loop over img elements, decode their base64 src and save them to public folder,
        //and then replace base64 src with stored image URL.
        foreach($images as $k => $img){
            $data = $img->getattribute('src');

            list($type, $data) = explode(';', $data);
            list(, $data)      = explode(',', $data);

            $data = base64_decode($data);
            $image_name= time().$k.'.png';
            $path = public_path().'/img/'.$directory.'/'.$image_name;
            $src = '/img/'.$directory.'/'.$image_name;

            file_put_contents($path, $data);

            $img->removeattribute('src');
            $img->setattribute('src', $src);
        }

        $content = $dom->savehtml();
        return $content;
    }

这也是我的内容示例,它是一个 base64 字符串。

<p>Porro esse ipsa, ali.</p><p><img src="data:image/jpeg;base64,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" data-filename="19598644_1899832350030685_6042892852142940235_n.jpg" style="width: 160px;"><br></p>

【问题讨论】:

  • 你有例子$content吗?请参阅:How to create a Minimal, Reproducible Example。您知道您将图像类型限制为 PNG?
  • @KIKOSoftware 我确实知道这一点,就像我说的那样,它在创建帖子时不会造成问题,只有在更新它时才会出现问题,即使它使用相同的数据进行更新也是如此。内容是这样的:&lt;p&gt;&lt;img data-filename="19598644_1899832350030685_6042892852142940235_n.jpg" style="width: 160px;" src="/img/post_photos/15640438640.png"&gt;&lt;p&gt;Fuga. Odio illum, oc.&lt;/p&gt;&lt;/p&gt;
  • 你能把$content的例子放在你的问题中吗?请确保它是准确的,而不仅仅是有点像真实的东西。我期待一个 base64 字符串。
  • 我运行了您问题中的代码,以及您问题中的示例,当您保存时,正确的内容在$data 中。您确定它实际创建文件,但文件的大小为零吗?我可以理解根本没有创建文件的情况。
  • 我的猜测是,我只能猜测,当您使用“更新方法”时,$content 会有所不同。

标签: php laravel summernote


【解决方案1】:

您可以检查图像是否为 base 64,在循环内,然后仅当图像为 Base64 时才更新

 $editor_content=$request->editor_content;
$dom = new \DomDocument('1.0', 'UTF-8');
libxml_use_internal_errors(true);
$dom->loadHtml($editor_content);
$images = $dom->getElementsByTagName('img');
$bs64='base64';//variable to check the image is base64 or not
foreach ($images as $k => $img) {
        $data = $img->getAttribute('src');
        if (strpos($data,$bs64) == true)//if the Image is base 64
         {
        $data = base64_decode(preg_replace('#^data:image/\w+;base64,#i', '', $data));
        $image_name = "/storage/blog/". 'post_' . time() . $k . '.png';
        $path = public_path() . $image_name;
        file_put_contents($path, $data);
        $img->removeAttribute('src');
        $img->setAttribute('src', $image_name);
        }
        else//put '/' to prevent lossing image  actual path
        {
            $image_name="/".$data;
            $img->setAttribute('src', $image_name);
        }
      };
 
$editor_content_save= $dom->saveHTML();
// return $editor_content_save;
$slug = Str::slug($request->title,'-');
$blog = Blog::where('id', $request->blog_id)->first();
$blog->title = $request->title;
$blog->author = $request->author;
$blog->tags=collect($request->tags)->implode(',');
$blog->content = $editor_content_save;
$blog->slug = $slug;
$blog->date = $request->date;
$blog->save();

【讨论】:

    【解决方案2】:
        $content=$Guide->input('MainContent');
        $dom = new \DomDocument('1.0', 'UTF-8');
        libxml_use_internal_errors(true);
        $dom->loadHtml($content);
        $images = $dom->getElementsByTagName('img');
        $bs64='base64';
        foreach ($images as $i => $img) {
                $data = $img->getAttribute('src');
                if (strpos($data,$bs64) == true)
                 {
                $data = base64_decode(preg_replace('#^data:image/\w+;base64,#i', '', $data));
                $image_name = '/images/userguide/'. time() . $i . '.png';
                $path = public_path() . $image_name;
                file_put_contents($path, $data);
                $img->removeAttribute('src');
                $img->setAttribute('src', $image_name);
                }
                else
                {
                    $image_name=$data;
                    $img->setAttribute('src', $image_name);
                }
              }
    
        $content_save= $dom->saveHTML();
    

    【讨论】:

    • 欢迎来到 Stack Overflow。没有任何解释的代码很少有帮助。 Stack Overflow 是关于学习的,而不是提供 sn-ps 来盲目复制和粘贴。请编辑您的问题并解释它如何回答所提出的具体问题。见How to Answer
    猜你喜欢
    • 2016-04-19
    • 2014-08-21
    • 2015-02-05
    • 2019-04-09
    • 2015-09-10
    • 1970-01-01
    • 1970-01-01
    • 2014-03-21
    • 2015-02-11
    相关资源
    最近更新 更多