Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 21.12.2018, 13:24
Профессор
Отправить личное сообщение для giwuf Посмотреть профиль Найти все сообщения от giwuf
 
Регистрация: 16.05.2017
Сообщений: 167

Почему при передаче php переменной в скрипт данные кодируются в uft-8?
Добрый день. Вопрос не из простых.

Касается он настройки платежной системы в интернет-магазине woocommerce. Проблема заключается в следующем: данные переменной php (почтовый адрес) передаются в скрипт почему-то закодированными.

Для начала получаю данные поля email введенные пользователем. С помощью var_dump проверяю, что в переменной содержится верная информация (email o4137889@nwytg.net), но при передаче переменной внутрь скрипта
accountId: '<?=$order->billing_email?>'


получаю вот такую закодированную строку в **utf-8**
accountId: '&#x6f;4&#x31;&#x33;7&#x38;&#x38;9&#x40;&#x6e;w&#x79;&#x74;g&#x2e;&#x6e;e&#x74;',


Причем, не важно выводится ли она через сокращенные <?= ?> или <?php ?> и echo
accountId: '<?php echo $billing_email ?>',

, через переменную или напрямую - результат каждый раз идентичен.

С чем это может быть связано и как исправить?

Код:
global $woocommerce;			
$order = new WC_Order( $order_id );
var_dump($order->billing_email); //o4137889@nwytg.net

<script src="https://widget.cloudpayments.ru/bundles/cloudpayments"></script>
<script>
	var widget = new cp.CloudPayments();
        widget.<?=$widget_f?>({ // options              <!-- /////////////???????????????  -->
        publicId: '<?=$this->public_id?>',  //id из личного кабинета
        description: 'Оплата заказа <?=$order_id?>', //назначение
        amount: <?=$order->get_total()?>, //сумма
        currency: '<?=$this->currency?>', //валюта
        invoiceId: <?=$order_id?>, //номер заказа 
        accountId: '<?=$order->billing_email?>', //идентификатор плательщика
        data: <?php echo (($this->kassa_enabled == 'yes') ? json_encode($kassa_array) : "{}") ?>
		            },
	function (options) { // success
		window.location.replace('<?=$this->get_return_url($order)?>');
	},
	function (reason, options) { // fail
		window.location.replace('<?=$order->get_cancel_order_url()?>');
        }
);
</script>


Сервер находится на unix под управлением vesta cp с php версией 7.2

Последний раз редактировалось giwuf, 21.12.2018 в 13:33.
Ответить с цитированием
  #2 (permalink)  
Старый 21.12.2018, 13:50
Профессор
Отправить личное сообщение для laimas Посмотреть профиль Найти все сообщения от laimas
 
Регистрация: 14.01.2015
Сообщений: 12,990

Сообщение от giwuf
такую закодированную строку в **utf-8**
Это не UTF, а html сущности. И косяк искать надо не в var_dump, а в том где она хранится, а хранится она как раз как &#x6f;4&#x31;&#x33;7&#x38;&#x38;9&#x40;&#x6e;w&#x7 9;&#x74;g&#x2e;&#x6e;e&#x74;, функция же на экране покажет текст.

PS. Вернее в браузере будет текст, после выполнения функции, смотрите не на текст, а на длину строки в этой функции.

Последний раз редактировалось laimas, 21.12.2018 в 13:59.
Ответить с цитированием
  #3 (permalink)  
Старый 21.12.2018, 14:29
Профессор
Отправить личное сообщение для giwuf Посмотреть профиль Найти все сообщения от giwuf
 
Регистрация: 16.05.2017
Сообщений: 167

Сообщение от laimas Посмотреть сообщение
Это не UTF, а html сущности. И косяк искать надо не в var_dump, а в том где она хранится, а хранится она как раз как &#x6f;4&#x31;&#x33;7&#x38;&#x38;9&#x40;&#x6e;w&#x7 9;&#x74;g&#x2e;&#x6e;e&#x74;, функция же на экране покажет текст.

PS. Вернее в браузере будет текст, после выполнения функции, смотрите не на текст, а на длину строки в этой функции.
Понял вас, но хранится она в $order_id и интересно, что сам он выводится без проблем, как и другие значения
invoiceId: <?=$order_id?>, //номер заказа


проверил c помощью функции count(), но он выводит 1. А есть ли в природе дешифраторы этих html функций? Или в настройках сервера нужно что-то прописывать?
Ответить с цитированием
  #4 (permalink)  
Старый 21.12.2018, 14:41
Профессор
Отправить личное сообщение для laimas Посмотреть профиль Найти все сообщения от laimas
 
Регистрация: 14.01.2015
Сообщений: 12,990

Сообщение от giwuf
нтересно, что сам он выводится без проблем
А их и не будет, ибо html сущности в браузере будут отображаться тем, что они представляют: &#x6f, это o, далее идет 4 как есть, затем &#x31;,это 1 и т.д.

Сообщение от giwuf
проверил c помощью функции count()
А причем тут count()? Функция var_dump выводит на экран тип переменой и ее значение, если тип строка, то в скобках будет указана длина строки. Бьюсь об заклад, что у вас показывает 78. Посчитайте длину символов адреса и длину строки сущностей.

Сообщение от giwuf
А есть ли в природе дешифраторы
Есть в РНР функция декодирования, но наверное же не декодировать надо, а выяснять почему такой бардак в данных. А такой бардак происходит тогда, когда не понимая когда нужно применять htmlspecialchars(), втыкают ее куда угодно, а если еще и htmlentities() с перепугу при сохранении в базу, то тут и получаем подобный бардак.

Разбирайтесь.

<!DOCTYPE HTML>
<html>
<head>
<meta charset="utf-8">
</head>
<body><h3>Не верь глазам своим</h3>
<p>&#x6f;4&#x31;&#x33;7&#x38;&#x38;9&#x40;&#x6e;w&#x79;&#x74;g&#x2e;&#x6e;e&#x74;</p>
</body>
</html>

Последний раз редактировалось laimas, 21.12.2018 в 14:52.
Ответить с цитированием
  #5 (permalink)  
Старый 21.12.2018, 15:03
Профессор
Отправить личное сообщение для giwuf Посмотреть профиль Найти все сообщения от giwuf
 
Регистрация: 16.05.2017
Сообщений: 167

Сообщение от laimas Посмотреть сообщение
А причем тут count()? Функция var_dump выводит на экран тип переменой и ее значение, если тип строка, то в скобках будет указана длина строки. Бьюсь об заклад, что у вас показывает 78. Посчитайте длину символов адреса и длину строки сущностей.
laimas здесь на самом деле вы ошиблись..
string(18) “o4137889@nwytg.net”


Цитата:
Есть в РНР функция декодирования, но наверное же не декодировать надо, а выяснять почему такой бардак в данных. А такой бардак происходит тогда, когда не понимая когда нужно применять htmlspecialchars(), втыкают ее куда угодно, а если еще и htmlentities() с перепугу при сохранении в базу, то тут и получаем подобный бардак.
Понял вас, будем искать, т.к. загвоздка в том, что сайт собран исключительно на темах и плагинах без вмешательства собственного кода.
Ответить с цитированием
  #6 (permalink)  
Старый 21.12.2018, 15:21
Профессор
Отправить личное сообщение для laimas Посмотреть профиль Найти все сообщения от laimas
 
Регистрация: 14.01.2015
Сообщений: 12,990

Сообщение от giwuf
здесь на самом деле вы ошиблись
А другой причины бить не может, английские символы и цифры не будут иметь проблем при выводе в любой объявленной кодировке, а в коде вашем не видно никаких преобразований и если этой пакостью не занимается класс CloudPayments, то вывод может быть только один - сам источник данных такой.
Ответить с цитированием
  #7 (permalink)  
Старый 23.12.2018, 15:59
Профессор
Отправить личное сообщение для giwuf Посмотреть профиль Найти все сообщения от giwuf
 
Регистрация: 16.05.2017
Сообщений: 167

Сообщение от laimas
А другой причины бить не может, английские символы и цифры не будут иметь проблем при выводе в любой объявленной кодировке, а в коде вашем не видно никаких преобразований и если этой пакостью не занимается класс CloudPayments, то вывод может быть только один - сам источник данных такой.
Здравствуйте, laimas!
С большим трудом, но удалось отыскать причину - поделюсь с вами. Есть такая зараза плагин Email Address Encoder
(A lightweight plugin that protects email addresses from email-harvesting robots by encoding them into decimal and hexadecimal entities.)
Вот он как раз и виноват во всем! Отключил - и все заработало!
Спасибо за помощь и подсказки!
Ответить с цитированием
  #8 (permalink)  
Старый 23.12.2018, 17:17
Профессор
Отправить личное сообщение для laimas Посмотреть профиль Найти все сообщения от laimas
 
Регистрация: 14.01.2015
Сообщений: 12,990

Я не в курсе того, что кроме этой пакости делает этот плагин, но учтите, что адреса мыла сервером должны обязательно проверятся.
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как из php файла передать данные в переменную javascript angelzzz Общие вопросы Javascript 36 01.07.2016 15:54
Проблема при передаче в jquery переменной c id элемента lectrouser jQuery 2 02.05.2011 16:51
Запуск выполнения PHP при нажатие на кнопку??? Abibas220 Общие вопросы Javascript 1 05.01.2011 12:05
Снятие затемнения с экрана при получении ответа от php срипта с помощью setInterval roma86 jQuery 0 16.08.2009 12:39
Почему не загружается скрипт? prog90 Я не знаю javascript 14 11.06.2009 11:52