Проблема со строкой - длина неверна - некоторые символы не отображаются

Я хотел обновить модуль Magento Ogone, чтобы он соответствовал новым вычислениям SHASign. Сейчас работает нормально, но есть проблема...

У меня проблема с некоторыми строками, возвращаемыми методом Magento: Mage::getUrl('ogone/api/accept');

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

строка (89) "ACCEPTURL = http: //www.xxxxxxx.be/store/fr_be/ogone/api/accept/KKKKKKKKKKKKKKKKKKK"

KKKK = секретный код от ogone

Если вы проверите длину не 89, а 80. Есть несколько скрытых машин, я могу увидеть их, если я сделаю цикл for и повторю один за другим символы.

Не отображаются символы:?___SID=U Я зарегистрировался в Magento, и параметр идентификатора сеанса в URL уже отключен.

В модуле мне нужно получить все поля формы, отправленные в Ogone, и создать строку SHA-1, чтобы обеспечить целостность данных со строкой, которая доступна только мне и Ogone. И с этой проблемой строка SHA-1, построенная на моей стороне, отличается от Ogone, потому что URL-адреса в форме отображаются без?___SID=U: сказали, что она не будет напечатана!

Поэтому прежде всего я не знаю, почему Magento включает его, когда я прошу его в конфиге не делать этого. А во-вторых, почему я не вижу символы в var_dump() или в любом эхо?

Как я могу отладить эту ситуацию? Я думаю, что есть некоторые функции, которые могут мне помочь.

Я исправил проблему с другой функцией для создания URL-адреса, чтобы моя строка SHA-1 была в порядке и модуль работал нормально. Мои опасения больше связаны с теми скрытыми символами, которые видит функция strlen и хэш-функция, но не echo или любая другая функция печати.

Спасибо за вашу помощь, и извините за мой плохой английский, а не мой родной язык.

3 ответа

Решение

Я также получил удар по этой проблеме.

Обратите внимание, что это "работает" для распечатки всей строки:

for ($i = 0; $i < strlen($linkUrl); $i++) print $linkUrl[$i].' ';

Но этот не учитывает ?___SID=U часть:

for ($i = 0; $i < strlen($linkUrl); $i++) print $linkUrl[$i];

Я также попытался напечатать числовые коды (в десятичном формате) символов, но это выглядит просто так:

63 95 95 95 83 73 68 61 85

Это ошибка PHP?

Я думал, что это проблема кодирования / многобайтовости /Unicode, но оказалось, что это просто особенность системы шаблонов Magento.

Я попробовал этот код: (примечание: в коде шаблона Magento!)

echo 'Hello?___SID=UWorld';

и хотите верьте, хотите нет, вы получите это:

HelloWorld

Таким образом, хотя URL-адреса "неправильные", механизм, который Magento использует для "скрытия" этих URL-адресов, еще более ошибочен, если просто выполнить str_replace что я считаю недокументированным. (Даже если это задокументировано, никто бы этого не ожидал!)

Могут ли тезисы "скрытых" символов быть Unicode? Вы пробовали mb_strlen?

Мы пострадали от той же проблемы. И я нашел довольно приличное решение этой проблемы на случай, если кто-то все еще столкнется с той же проблемой.

Первоначально нечто подобное было включено в файл Config.php:

public function getAcceptUrl()
{
    return Mage::getUrl('ogone/api/accept');
}

Если вы замените его следующим, больше ничего не будет скрыто?___SID будет прикреплен:

public function getAcceptUrl()
{
    return Mage::getUrl('ogone/api/accept', array('_nosid' => true));
}

Вы должны сделать то же самое со всеми остальными функциями get****Url(), и проблема решена.

Другие вопросы по тегам