Intereting Posts
Показать меню на боковой панели, если на конкретной странице и конкретной роли пользователя (is_page, current_user_can) Используйте страницу выбора страниц на странице создания WordPress Стайлинг блога в SASS Ошибка установки плагина в wordpress Объектно-ориентированный плагин, добавьте действие и переменные Классы WordPress объяснены мета-поля для всего сайта wordpress Настройка Woocommerce для режима тестирования / производства в базе данных? Как создать комментарий для пользователей из разных доменов Сделать ссылку меню открытой на новой вкладке? Получите сообщение «Заголовки уже отправлены» для плагина, который я создаю, когда пытаюсь войти в систему Пользовательский цикл не учитывает категории / теги Восстановление почты Как остановить загрузку нескольких копий jquery Я попробовал обновить свой Live wordpress сайт до последней версии wordpress (v4.7), и я столкнулся с некоторыми проблемами

Base64 & JSON Encode массив в PHP, использовать в качестве атрибута данных HTML, декодировать и анализировать в JavaScript … с надлежащим Escaping

Я ищу, чтобы передать произвольный массив из PHP в JavaScript при правильном выходе. Я полагаюсь на использование base64, и я полагаю, что base64 не является атрибутом данных безопасным, так как хорошим разработчиком я являюсь esc_attr данными. Есть ли right способ убедиться, что данные base64 сохраняют свою целостность в JavaScript?

Вот надуманный пример – это прекрасно работает, потому что esc_attr не изменяет целостность кодировки base64.

 <?php $array = [ [ 'the' => 'quick', 'brown' => 'fox' ], [ 'test' => 'test', 'foo' => 'bar' ] ]; $values_json = base64_encode( json_encode( $array ) ); ?> <input id="check" type="checkbox" data-value="<?php esc_attr_e( $values_json ); ?>"> Foobar <script> var checkbox = document.getElementById(id); checkbox.addEventListener('click', function () { console.log(JSON.parse(atob(this.dataset.value))); } ); </script> 

В своем исследовании я столкнулся с этим решением для обработки этого с использованием JSON – однако, как я получаю данные, у меня нет простого способа для ввода данных, чтобы получить его, используя ключ в качестве атрибута данных.

Solutions Collecting From Web of "Base64 & JSON Encode массив в PHP, использовать в качестве атрибута данных HTML, декодировать и анализировать в JavaScript … с надлежащим Escaping"

Возможный вывод base64_encode() содержит a-zA-Z0-9+/ и возможно = или == добавлено.

Тестирование с помощью

 $str = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789+/='; 

мы находим, что:

 esc_attr( $str ) === $str 

true, поэтому выглядит, как esc_attr() сохраняет строки, закодированные base64.

Существуют возможные регулярные выражения, которые помогут с проверкой, но в соответствии с этим ответом @BoltClock мы можем проверить его со вторым строгим параметром:

 base64_decode( $str, $strict = true ) 

Затем мы могли бы обернуть его функцией:

 function is_base64( $str ) { return base64_decode( $str, true) !== false; } 

для проверки его на PHP.