2016-06-29 8 views
0

Я пытаюсь создать строку значений, взятых из переменных в интерфейсе со следующей структурой:Создание URL кодируются строки в 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 также сохраняет ":" и не работает.

Пример массива:

обр: {ключ1: 'а', ключ2: 'б', ключ3: 'с'}

не закодирован результат:

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

желаемый результат:

ул: '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

Является ли http://www.smarty.net/docsv2/en/language.modifier.escape.tpl полезным? – apokryfos

+0

es это работает для кодировки URL, но мне все еще нужно найти способ добраться до этой строки. – johan855

+0

Комбинируйте с http://stackoverflow.com/questions/1285514/howto-generate-json-with-smarty – apokryfos

ответ

1

Вы можете комбинировать json_encode (или сериализовать, если вам нужно только использовать его в PHP) и бежать:

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

Кроме того, если вы хотите, чтобы сделать строку короче, вы можете использовать сжатие:

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

Хотя это может быть немного избыточным для коротких массивов, и вам придется использовать base64_decode, gzuncompress и json_decode строку, когда вы ее получите.

+0

Привет, Боргтекс, спасибо за ваш ответ. Не могли бы вы подробно рассказать мне о том, как синтаксис должен знать, что я использую smarty?Должен ли я просто назначить результат: {$ arr | json_encode | escape: 'url'}? Я использую, возможно, неправильный синтаксис, и он разбивает мой код. – johan855

+0

Не знаете, какую версию вы используете. Вы также используете пользовательские разделители ('[{' вместо '{'). Итак, в smarty 3, если вы хотите назначить его переменной, это будет [{$ variable_name = $ array_name | json_encode | escape: 'url'}] – Borgtex

+0

Я думаю, что это другая версия, так как я выполняю назначение простой «var: array» в выражении .push, но я не уверен, как указать обработку массива для его кодирования и т. д. – johan855

Смежные вопросы