When embedding data within JavaScript string literals in HTML, standard ECMAScript or JSON escaping (like json_encode()) is insufficient because it does not account for how browsers interpret JavaScript as HTML. To prevent XSS vulnerabilities, use Laminas\Escaper\Escaper::escapeJs().
This method applies an extended set of escaping rules that converts potentially dangerous characters into hexadecimal or Unicode escapes, leaving only basic alphanumeric characters, commas, periods, and underscores unescaped. This prevents the browser from misinterpreting JavaScript markup as HTML entities or special characters.
<?php
$input = 'bar"; alert("Meow!"); var xss="true';
$escaper = new Laminas\Escaper\Escaper('utf-8');
$output = $escaper->escapeJs($input);
?>
<script type="text/javascript">
// The output is safely escaped for use in a JS literal
var foo = "<?= $output ?>";
</script>