Проблема со строкой - длина неверна - некоторые символы не отображаются
Я хотел обновить модуль 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(), и проблема решена.