在smarty中创建URL编码的字符串

时间:2016-06-29 09:37:34

标签: php smarty

我正在尝试使用以下结构创建从后端变量中获取的值字符串:

  

编码前:

transaction_id=0815/2009;transaction_cid=54AB;item_id=402163045080;item_va lue=25.20;item_quantity=1; 
transaction_id=0815/2009;transaction_cid=54AB;item_id=402163045080;item_va lue=25.20;item_quantity=1;
  

编码后:

transaction_id%3D0815%2F2009%3Btransaction_cid%3D54AB%3Bitem_id%3D40216304 5080%3Bitem_value%3D25.20%3Bitem_quantity%3D1%3Bitem_id%3D847163029054%3Bi tem_value%3D16.81%3Bitem_quantity%3D2

我设法用这种形式创建一个包含必要数据的数组:

'[{"transaction_id":"233684","transaction_cid":"d2871c13c507583048d8ecf4a16f94c0","i tem_id":"3524","item_value":"4915.13","item_quantity":"1"}]',

但我需要的是url编码字符串中数组的所有这些元素。

我没有想法,因为我尝试的所有东西似乎都不起作用。

使用JSON.stringify保留":"""",使用alert()或join也会保留":"并且不具备效果。

示例数组:

  

arr:{key1:'a',key2:'b',key3:'c'}

非编码结果:

  

str:'key1 = a; key2 = b; key3 = c'

期望的结果:

  

str:'key1%3Da%3Bkey2%3Db%3Bkey3%3Dc'

到目前为止,这是我的代码:

[{foreach from=$orderArticles item="currOrderArticle"}]
        [{assign var="currBasePrice2" value=$currOrderArticle->getBasePrice()}]

    products_info.push(
              {
              transaction_id: '[{$order->oxorder__oxordernr->value}]', 
              transaction_cid: '[{$order->oxorder__oxuserid->value}]', 
              item_id: '[{$currOrderArticle->oxorderarticles__oxartnum->value}]',
              item_value: '[{$basket->getDiscountedNettoPrice()}]',
              item_quantity: '[{$currOrderArticle->oxorderarticles__oxamount->value}]'
              });

    [{/foreach}]

关于如何实现这一目标的任何想法?

1 个答案:

答案 0 :(得分:1)

你可以组合json_encode(或序列化,如果你只需要在php中使用它)和逃避:

{$arr|json_encode|escape:'url'}

此外,如果您想缩短字符串,可以使用压缩:

{$arr|json_encode|gzcompress|base64_encode|escape:'html'}

虽然对于短数组可能有点过分,但是当你收到字符串时,你必须使用base64_decode,gzuncompress和json_decode字符串。