Делаем так: echo json_encode(['id' => 123], JSON_HEX_QUOT);
На выходе получаем: {"id":123}
Не понимаю в чем проблема. Мне нужно закодировать кавычки чтобы вывести json в data атрибут html.
во первых, оставьте в покое сам json. Данный формат подразумеваем, что имена полей всегда заключены в двойные кавычки, как и строковые значения полей. Это формат, на него влиять вы не сможете.
Ваша проблема в том, чтобы вывести строку, содержащую двойные кавычки, в дата-атрибут.
Все что для этого надо сделать - чтобы в данной строке не встретилась двойная кавычка, и не нарушила разметку. Для этого следует заменить двойные кавычки в строке на их эквивалент - ", для чего предназначены функции htmlentities() (с параметром ENT_COMPAT) либо htmlspecialchars()
Сборка персонального компьютера от Artline: умный выбор для современных пользователей