Правильный способ передачи сложных переменных в javascript через HTML

Я пытался уйти от использования htmlentities PHP, и вот, где я остановился:

<?php echo '<img ... onclick="MP.view(\''.$i->name.'\') />'; ?> 

Но потом я подумал, вместо того, чтобы делать замены и проверки специальных символов, я просто JSON весь объект.

 <?php echo '<img ... onclick="MP.view('.json_encode($i).') />'; ?> 

И это обеспечило очень нежелательный результат, введя тонну двойных кавычек. Итак, как мне это сделать? Должен ли я назначать числовой уникальный идентификатор для каждого изображения и просто передавать идентификатор, а затем искать остальную часть данных из массива JS?

Правильный подход в таких случаях:

  htmlspecialchars(json_encode($var), ENT_QUOTES, "UTF-8") 

htmlspecialchars превращает любые двойные кавычки в надлежащие HTML-экраны, делая полученную строку подходящей для большинства атрибутов. Параметр ENT_QUOTES также выполняет одиночные кавычки; но вам, вероятно, это не нужно в вашем примере.

Было бы гораздо меньше избегать (и меньше байтов), чтобы передать данные примерно так:

 echo '<script>var myObj = '.json_encode($i).'</script>'; 

Тогда ваш код мог бы выглядеть примерно так:

 echo '<img ... onclick="MP.view(myObj)" />';