在 smarty 中创建一个 URL 编码的字符串
Creating a URL encoded string in smarty
我正在尝试使用以下结构创建从后端变量中获取的值字符串:
Before encoding:
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;
After encoding:
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}]
关于如何实现这一点有什么想法吗?
你可以结合json_encode(如果你只需要在php中使用它,则序列化)和转义:
{$arr|json_encode|escape:'url'}
另外,如果你想让字符串更短,你可以使用压缩:
{$arr|json_encode|gzcompress|base64_encode|escape:'html'}
尽管对于短数组来说这可能有点矫枉过正,您必须 base64_decode、gzuncompress 和 json_decode 收到字符串时。
我正在尝试使用以下结构创建从后端变量中获取的值字符串:
Before encoding:
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;
After encoding:
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}]
关于如何实现这一点有什么想法吗?
你可以结合json_encode(如果你只需要在php中使用它,则序列化)和转义:
{$arr|json_encode|escape:'url'}
另外,如果你想让字符串更短,你可以使用压缩:
{$arr|json_encode|gzcompress|base64_encode|escape:'html'}
尽管对于短数组来说这可能有点矫枉过正,您必须 base64_decode、gzuncompress 和 json_decode 收到字符串时。