Me encuentro con un problema en el que estoy asignando una variable Laravel (en hoja) a una variable JS, pero la variable Laravel tiene múltiples comillas dobles y simples, acentos graves y líneas finales sin escape. Si uso una función de PHP como addslashes , JS me da el siguiente error:
Uncaught SyntaxError: "" string literal contains an unescaped line break¿Hay algún ayudante de Laravel o algo que pueda escapar de los acentos graves en la cadena? ¿O hay algún ayudante que pueda escapar de mis saltos de línea sin escape? Podría usar ese mandato con barras adicionales.
Mi código de Laravel:
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 }}";Básicamente, mi variable laravel es el valor del editor de monaco en la base de datos y quiero establecer el valor del editor de monaco desde JS para que no pueda colocar directamente la variable en html. Si debo usar fetch/ajax, puedo manejar esto adecuadamente, pero no quiero usar eso, será una pérdida de recursos y tiempo.
He encontrado una solución por el momento
Escapo de las comillas invertidas (`) y los saltos de línea (\n) en esto para que pueda manejarse en 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("\r\n", "\n", "\r"), '\\n', $note->body); // dd($note->body); return view("share", ["user" => $user, "note" => $note]); } abort(404); } Y usé {!! $note->body !!} para que no se escapen los caracteres html.
JavaScript
let body = `{!! $note->body !!}`; Mi analizador de rebajas escapará automáticamente a los caracteres que lo necesitan. Hice esto porque se escapaban todos los caracteres html, las comillas dobles y los corchetes angulares, y dado que ya se habían escapado, el analizador de rebajas no los analizaba. Estoy usando Remarkable y no analiza html (se le escapa), solo rebaja. Así que es relativamente seguro, supongo.