The addslashes method is NOT reliable. Instead, do:
new Element('div', {
html: <?= htmlspecialchars(json_encode($html)) ?>
}.inject($('content'));
addslashes() is a braindead deprecated method of escaping text for SQL usage. It's not intended for Javascript. That's what JSON is for. It'll convert your PHP data (simple variable, object, array, etc...) into what's guaranteed to be syntactically correct Javascript.
JSON (or javascript) embedded in HTML needs to be properly escaped for HTML. That is why it is wrapped in htmlspecialchars()
. Consider that JSON will NOT encode <
, >
, &
, and others because they are valid characters in a quoted JSON string.
However, since you're just inserting one block of html into JS, you could just have
<div id="seekrithiddenhtml" style="display: none">
<?= $html ?>
</div>
from which you can then do a simple cloning in javascript.