@andreysuha
Что то знаю

Как экранирование кавычки html атрибутов в json?

Есть функция которая превращает в php объект или массив в строку и выводит ее в js.

ниже как я это делаю
<script>
<?php $str = json_encode($value);  ?>
var <?php echo $key?> = JSON.parse('<?php echo $str;?>'.replace(/\r?\n/g, ""));
</script>

Проблема в том в получаемом json может лежать html и собственно у атрибутов тегов есть двойные кавычки, что в результате приводит к Uncaught SyntaxError: Unexpected token w in JSON at position 469. Как можно за экранировать такие скобки?

UPD приведу полный код функции возможно это поможет лучше меня понять))

function VarToJS ($vars) {
        if(gettype($vars) !== "array") return; ?>
        <script type="application/javascript">
        <?php foreach ($vars as $key => $value): ?>
            <?php
                if (gettype($value) === "resource" || gettype($value) === "unknown type") continue;
                elseif (gettype($value) === "array" || gettype($value) === "object") {
                $str = json_encode($value);
            ?>
                var <?php echo $key?> = JSON.parse(`<?php echo $str;?>`.replace(/\r?\n/g, ""));
            <?php } elseif(gettype($value) === "boolean" ||
                           gettype($value) === "integer" ||
                           gettype($value) === "double" ||
                           gettype($value) === "NULL" ) {?>
                var <?php echo $key?> = <?php echo $value;?>;
            <?php } elseif(gettype($value) === "string") {?>
                var <?php echo $key;?> = "<?php echo $value;?>";
            <?php } ?>
        <?php endforeach; ?>
        </script>
        <?php
    }
  • Вопрос задан
  • 789 просмотров
Решения вопроса 1
@andreysuha Автор вопроса
Что то знаю
Спасибо Алексей Скопин решение оказалось весьма простым
<script>
  var <?php echo $key?> = <?php echo json_encode($value); ?>;
</script>
Ответ написан
Пригласить эксперта
Ответы на вопрос 2
ThunderCat
@ThunderCat Куратор тега PHP
{PHP, MySql, HTML, JS, CSS} developer
json_encode($value); уже создает строку с экранированными кавычками. А ошибка у вас вроде к ним не относится.
Ответ написан
svistiboshka
@svistiboshka
живые веб интерфейсы
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы