Проблема со строкой - длина неверна - некоторые символы не отображаются - PullRequest
2 голосов
/ 20 июля 2011

Я хотел обновить модуль 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 ]

1 голос
/ 21 октября 2011

Я тоже получил эту проблему.

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

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, который я считаю недокументированным. (Даже если это задокументировано, этого никто не ожидал!)

1 голос
/ 09 февраля 2012

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

Изначально что-то подобное было включено в файл 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 (), и проблема решена.

1 голос
/ 20 июля 2011

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

...