【问题标题】:Creating a URL encoded string in smarty在 smarty 中创建一个 URL 编码的字符串
【发布时间】:2016-06-29 09:37:33
【问题描述】:

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

编码前:

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}]

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

【问题讨论】:

标签: php smarty


【解决方案1】:

你可以结合json_encode(或者如果你只需要在php中使用就序列化)和转义:

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

另外,如果你想让字符串更短,你可以使用压缩:

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

虽然这对于短数组来说可能有点矫枉过正,你必须在收到字符串时对字符串进行 base64_decode、gzuncompress 和 json_decode。

【讨论】:

  • 您好 Borgtex,感谢您的回答。您能否详细说明一下语法应该如何知道我正在使用 smarty?我应该简单地分配结果:{$arr|json_encode|escape:'url'}?我可能使用了错误的语法,它破坏了我的代码
  • 不知道你用的是什么smarty版本。您似乎也在使用自定义分隔符('[{' 而不是 '{')。所以,在 smarty 3 中,如果你想将它分配给一个变量,它将是 [{$variable_name=$array_name|json_encode|escape:'url'}]
  • 我认为它是一个不同的版本,我进行分配的方式是 .push 语句中的一个简单的“var:array”,但我不确定如何指定对数组的处理以对其进行编码等等。
  • Ummmm 我不确定你要做什么...... push 语句是 javascript,[{ }] 中的代码是 Smarty,smarty 在服务器中处理,javascript 在浏览器。至于你的问题,我想你想要类似 www.mypage.com/mycode.php?variable=encoded_array
  • 不,我想从后端以数组的形式获取值,然后将其转换为编码字符串并传递给数据层
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-08-10
  • 2015-09-12
  • 2019-12-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-09-21
相关资源
最近更新 更多