数组索引中的新行

时间:2014-07-21 11:32:51

标签: php arrays opencart

我们在自定义和旧版opencart中从购物车中删除某些商品时遇到问题。在我们的网站中,购物车以会话形式存储在会话中:

[product_id:options] => $quantity

问题似乎是选项数据的一部分包含新行,这意味着会话数据看起来像这样。

Array
(
    [808: yyuu

.3959: yyuu

.3959] => 1
)

当客户尝试删除产品时,密钥会发送到服务器,但却找不到数组密钥

808: yyuu

.3959: yyuu

.3959

作为索引。

新行字符可以用作数组索引吗?

1 个答案:

答案 0 :(得分:0)

您拥有的选项是将其更改为当前行为 - 其中选项不再是可读方式(数组),但它们被编码为Base64,如此(system/library/cart.php::add(),OC v.1.5 1.5.1):

if (!$option) {
    $key = (int)$product_id;
} else {
    $key = (int)$product_id . ':' . base64_encode(serialize($option));
}

然后带有选项的购物车中的产品钥匙如下所示

  

123:SDFD /的GHDs%RFW $ ET35&安培; TSF ^ WRT3 @ 5YIWFHLDSFW / ETE4 =

然后可以通过以下代码从此键获取编码选项:

$product = explode(':', $key);
$product_id = $product[0];

// Options
if (isset($product[1])) {
    $options = unserialize(base64_decode($product[1]));
} else {
    $options = array();
}

这些更改可能必须通过系统库Cart在更多地方实施。

现在在数组中找到这些键不会有问题,因为它永远不会包含白色字符(\n\r\t\s)。