如何在Php/Laravel字符串变量中转义反引号?



我遇到了一个问题,我将Laravel变量(在blade中)分配给JS变量,但是Laravel变量有多个双引号和单引号,反引号和未转义的尾行。如果我使用PHP函数,如addslashes, JS给我以下错误:

Uncaught SyntaxError: "" string literal contains an unescaped line break

是否有任何Laravel助手或可以逃避字符串中的反引号的东西?或者有任何帮助程序可以转义我的未转义换行符吗?我可以用addslars命令。

My Laravel Code:

web.php

Route::get("/{user:username}/{note:share_token}", [HomeController::class, "share"])->name("note.share.index")->withoutMiddleware(["auth"]);

HomeController.php

public function share(User $user, Note $note)
{
if ($user->username === $note->user->username)
{
$note->body = addslashes($note->body);
return view("share", ["user" => $user, "note" => $note]);
}
abort(404);
}

Javascript

let body = "{{ $note->body }}";

基本上我的laravel变量是摩纳哥编辑器在数据库中的值,我想从JS设置摩纳哥编辑器的值,所以我不能直接把变量放在html中。如果我要使用fetch/ajax,我可以很好地处理这个问题,但我不想这样做,这会浪费资源和时间。

我已经想出了一个暂时的解决办法

我转义了这里的反引号(')和换行符(n),以便它可以在JS中处理

HomeController.php

public function share(User $user, Note $note)
{
if ($user->username === $note->user->username)
{
$note->body = str_replace('`', '`', $note->body);
$note->body = str_replace(array("rn", "n", "r"), '\n', $note->body);
// dd($note->body);
return view("share", ["user" => $user, "note" => $note]);
}
abort(404);
}

我使用{!! $note->body !!},这样它就不会转义html字符。

JavaScript

let body = `{!! $note->body !!}`;

我的markdown解析器将自动转义需要它的字符。我这样做是因为,所有的html字符、双引号和尖括号都被转义了,因为它们已经被转义了,所以markdown解析器没有解析它们。我使用Remarkable,它不解析html(转义它),只是降价。所以我想这是相对安全的。

最新更新