【问题标题】:Can I convert a string with json_encode back into readable html in a textarea?我可以将带有 json_encode 的字符串转换回文本区域中的可读 html 吗?
【发布时间】:2015-10-22 06:14:21
【问题描述】:

我创建了一个带有所见即所得文本编辑器的文本区域。用户将单击文本区域并像任何文本编辑器一样开始输入。然后,他们将使用该文本保存表单,然后将数据使用$data['description'] = json_encode($description_data); 保存到数据库中,这会将编码字符串保存到数据库中。

以下是我将在 db 列中得到的内容:

""<h1>test<\/h1>\r\n\r\n<p>paragraph<\/p>\r\n\r\n<p><u><em><strong>some text<\/strong><\/em><\/u><\/p>\r\n""

之所以采用这种格式,是因为它是一些 json 输出的一部分,作为 api 的一部分,应用程序需要将文本转换为这种格式。

我的主要问题是,当管理员在 textarea 中编辑该数据时,文本将作为上面预期的数据添加回来,如下所示:

此文本不需要包含任何内容,并且是文本区域中的普通 html。这可能吗?

下面是控制器功能:

public function store(Offer $offer)
    {

        $offerId = $offer['id'];

        $data = Input::except('image','featured');
        //$featured_data = array( 'offer_date' => $data['offer_date'], 'starttime' => $data['offer_start_time'], 'endtime' => $data['offer_end_time'] );
        $description_data = $data['description'];
        $validation = Validator::make($data, Offer::$rules);


        if ($validation->fails()) {
            return redirect('offers')->with('message', $validation->errors());
        } else {
            $file = Input::file('image');
            $filename = date('Y-m-d-H')."-".$file->getClientOriginalName();

            $path = storage_path('app/uploads/' . $filename);
            Image::make($file->getRealPath())
              ->resize(600, 600)
              ->save($path);

              $data['image'] = 'storage/app/uploads/'.$filename;
              $data['description'] = json_encode($description_data);

            Offer::create( $data );
            return redirect('offers')->with('message', 'Offer added!');
        }

    }

我得到了这个形式:

<div style="clear: both;" class="form-group">
    {!! Form::label('description', 'Offer Description:') !!}
    {!! Form::textarea('description', null, array('id'=>'editor1','class' => 'ckeditor form-control')) !!}
</div>

希望这可以实现。

【问题讨论】:

  • 我认为您应该完全按照用户输入的数据保存数据(可能已清理以删除脚本/样式块,但这是另一个问题),即没有 json_encoding 它。当您需要通过 API 发送它时,然后在发送它之前对其进行 json_encode(或使用 response()->json())。

标签: php html json laravel wysiwyg


【解决方案1】:

输出时只使用json_decode。它与 json_encode 相反。

【讨论】:

    【解决方案2】:

    这是一个 json 编码的字符串,虽然它不是单独有效的。

    试试这个:

    $var_str = '<h1>test<\/h1>\r\n\r\n<p>paragraph<\/p>\r\n\r\n<p><u><em><strong>some text<\/strong><\/em><\/u><\/p>\r\n';
    
    $str_in = '{"s": "'. $var_str . '"}';
    
    $sArr = json_decode($str_in, true);
    
    $cleanString = $sArr['s'];
    

    或 javascript 中的等价物。

    这里的 PHP 小提琴:http://sandbox.onlinephpfunctions.com/code/625c6ffd9d31215f8f73f6e02b5328e0fdf807e7

    【讨论】:

    • 所以我得到这个返回""{\"s\": \"\"&lt;p&gt;&amp;quot;&lt;\\\/p&gt;\\r\\n\\r\\n&lt;h1&gt;test&amp;lt;\\\\\\\/h1&amp;gt;\\\\r\\\\n\\\\r\\\\n&lt;\\\/h1&gt;\\r\\n\\r\\n&lt;p&gt;paragraph&amp;lt;\\\\\\\/p&amp;gt;\\\\r\\\\n\\\\r\\\\n&lt;\\\/p&gt;\\r\\n\\r\\n&lt;p&gt;&lt;u&gt;&lt;em&gt;&lt;strong&gt;some text&amp;lt;\\\\\\\/strong&amp;gt;&amp;lt;\\\\\\\/em&amp;gt;&amp;lt;\\\\\\\/u&amp;gt;&amp;lt;\\\\\\\/p&amp;gt;\\\\r\\\\n&amp;quot;&lt;\\\/strong&gt;&lt;\\\/em&gt;&lt;\\\/u&gt;&lt;\\\/p&gt;\\r\\n\"\"}""
    • 那个小提琴很好,但是这段代码需要通过 laravel 中的控制器编辑方法在文本字段中工作
    猜你喜欢
    • 1970-01-01
    • 2021-02-05
    • 1970-01-01
    • 2013-11-28
    • 2018-09-01
    • 2011-02-10
    • 1970-01-01
    • 2010-12-04
    • 1970-01-01
    相关资源
    最近更新 更多