Я пытался уйти от использования 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)" />';