字符串问题 - 长度不正确 - 包括一些字符未显示

时间:2011-07-20 10:27:58

标签: magento hidden strlen chars geturl

我想升级Magento Ogone模块以匹配新的SHASign计算。 它现在工作正常,但有一个问题......

我遇到了Magento方法返回的一些字符串的问题:Mage :: getUrl('ogone / api / accept');

它返回一个字符串,其中包含一些不会在屏幕上打印的字符。我不知道为什么。

string(89)“ACCEPTURL = http://www.xxxxxxx.be/store/fr_be/ogone/api/accept/KKKKKKKKKKKKKKKKKK”

KKKK =来自ogone的密码

如果检查长度不是89而是80。 有一些隐藏的汽车,我可以看到它们,如果我做一个for循环并逐个回应字符。

未显示的字符是:?___ SID = U. 我检查了Magento,并且URL中的会话ID参数已被禁用。

在模块中,我需要获取发送到Ogone的所有表单字段并创建一个SHA-1字符串,以确保数据完整性,并且只有我和Ogone可用的字符串。 有了这个问题,我身边的SHA-1字符串与Ogone不同,因为表单中的URL没有显示?___ SID = U:告诉你它不会被打印!

首先,我不知道为什么Magento包含它,当我在配置中要求他不这样做时。 其次,为什么我不能在var_dump()或任何echo上看到字符?

我该如何调试这种情况?我想有一些功能可以帮助我。

我使用另一个函数来修补问题来构建URL,这样我的SHA-1字符串就知道了,模块看起来工作正常。我的关注点更侧重于strlen函数和hash函数看到的隐藏字符,而不是echo或任何其他打印函数。

感谢您的帮助,请原谅我的英语不好,而不是我的母语。

3 个答案:

答案 0 :(得分:1)

这些“隐藏”的字符是否可以是Unicode?你试过mb_strlen吗?

答案 1 :(得分:1)

我也遇到了这个问题。

请注意,这可用于打印整个字符串:

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。 (即使记录在案,也没有人会想到这一点!)

答案 2 :(得分:1)

我们遇到了同样的问题。 我找到了一个相当不错的解决方案,以防有人遇到同样的问题。

最初,这样的内容包含在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()函数执行相同的操作,问题就解决了。