@zendpr

Json удаляет \ как исправить?

Всем привет , помогите решить проблемку.
Есть php который генерирует json
<?php
   $update_tpl = '<tr id="upd_{num}">
        <td>{num}</td>
        <td><div class="btn btn-green" onclick="text(\'{base64}\', \'{num}\')"><center>Подробнее</center></div></td>
        <td>{filepath}</td>
        <td>{filename}</td>
        <td>{date}</td>
        <td>Отсутствует</td>
        <td id="btn_{num}"><button class="btn btn-green" onclick="return install(\'{filepath}\', \'{filename}\', \'{num}\', \'0\', \'Отсутствует\')">Установить</button></td>
        <td></td>
        </tr>
        <!-- <div class="btn btn-red" style="width: 170px">Установлена</div> -->
        <script type btn-green" onclick="
            } else if(data[\'upd\'] == 1 && data[\'status\'] == 1)
                $(\'#upd_{num}\').remove();
        });
        </script>';

    $updates = array(
        array(
            'filepath' => 'domen/update/update_10.09.2021.zip',
            'num' => '25',
            'filename' => 'update_10.09.2021.zip',
            'date' => '31.05.2020 - 13:09',
            'base64' => base64_encode('Сообщение!'),
        )
    );

    $result = '';
    foreach($updates as $update) {
        $result .= str_replace(array_map(function($el) {
            return '{' . $el . '}';
        }, array_keys($update)), array_values($update), $update_tpl);
    }

    file_put_contents($_SERVER['DOCUMENT_ROOT'] . '/new_update.json', json_encode(array('html' => $result)));


но при создании json
не генерируются \
<script type="text/javascript">
$.getJSON(home+'update/id/25', function(data){
if(data['upd'] == 1 && data['status'] == 0){
$('#upd_25').appendTo('#update_install');
$('#btn_25').html('<div class="btn btn-green" onclick="return install('domen/update/update_10.09.2021.zip', 'update_10.09.2021.zip', '25', ' 0 ', 'Отсутствует')" style="width: 105px;"> авыавы </div>\ ');
} else if(data['upd'] == 1 && data['status'] == 1)
$('#upd_25').remove();
});
</script>


правильная генерация должна быть так с \
$('#btn_21').html('<div class="btn btn-green" onclick="return install(\'domen/update/update_10.09.2021.zip\', \'update_10.09.2021.zip\', \'21\', \'0\', \'Отсутствует\')" style="width: 105px;"> авыавы </div>');
  • Вопрос задан
  • 676 просмотров
Решения вопроса 1
Rsa97
@Rsa97
Для правильного вопроса надо знать половину ответа
Сравните:
$x = '-- \' --';
print $x . "\n"; // -- ' --

$y = '-- \\\' --';
print $y . "\n"; // -- \' --

To specify a literal single quote, escape it with a backslash (\). To specify a literal backslash, double it (\\).
https://www.php.net/manual/en/language.types.strin...
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 2
DmitriyEntelis
@DmitriyEntelis
Думаю за деньги
Что заставило вас использовать собственный велосипед вместо обычного json_encode?
Тем более не вижу у вас в коде никакого экранирования, сломать это крайне легко даже случайно.
Ответ написан
Комментировать
@denizkino_mesto
Зачем собственно html разметку в json переводить?
Ответ написан
Комментировать
Ваш ответ на вопрос

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

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