Intereting Posts
Пользовательская функция wp_trim_words () не обрезается справа Образец URL-адреса WordPress перенаправляется на главную страницу Как ограничить выбор таксономии детей Удалить комментарии MS Word из вставленного текста Как сохранить значения настраиваемого поля ввода на экране «Сеть»> «Информация о сайте» Добавить титры типа публикации в раскрывающемся списке настроек Как отобразить the_tags () как обычный текст Ajax не публикует данные формы для запроса в функции PHP не может добавлять новые пункты меню в экран структуры меню wordpress 4.2.4 Пользовательская запись в блоге в Genesis Sample Child Theme Несколько цветов в теме WordPress за раз Способы обработки SVG-рендеринга в wordpress? Как добавить опцию «Шаблон» в панели атрибутов страницы? «О нас», «контактные» разделы должны быть опубликованы в статье (публикации) или странице на простом маленьком бизнес-сайте? Используйте WP_Meta_Query для перечисления всех значений для 1 ключевого шаблона страницы

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 – однако, как я получаю данные, у меня нет простого способа для ввода данных, чтобы получить его, используя ключ в качестве атрибута данных.

Возможный вывод 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.