gzhegow
@gzhegow
aka "ОбнимиБизнесмена"

Как передать верстку через JSON в Javascipt из PHP?

Все мозги себе съел уже =)

В общем авторы писавшие сайт, явно не знали, что в языковом файле ну очень небезопасно использовать одновременно:
1. одинарные кавычки
2. двойные кавычки
3. переносы строк
4. верстку и теги
5. знаки процента в символах %s, %d и тд для sprintf

Теперь функция json_encode($data, JSON_HEX_QUOT) с прямой задачей не справляется.
Я его беру значит, превращаю в JSON, потом вывожу в шаблоне в виде функции

php:
$data = get_langs();
$json = json_encode($data, JSON_HEX_QUOT);
$smarty->assign('json', $json);


template.htm
<script>
App.Langs.addJson('{$json}');
</script>


Если поставить одинарные кавычки - ругается с одинарными.
Если двойные - с двойными.

Пробовал еще вот так:
str_replace("\"", '\"', str_replace("'", '\'', json_encode($data)))


Ну вообще никак! Последний раз показало конфликт у значка %, думал движение - а шишь, оно заменило двойную кавычку двумя наклонными чертами вместо одной почему-то.

Есть кто помочь?
  • Вопрос задан
  • 934 просмотра
Решения вопроса 2
xmoonlight
@xmoonlight
https://sitecoder.blogspot.com
php.net/manual/ru/function.base64-encode.php
И в JS:
function base64_decode(c){0<=c.indexOf("=")&&(c=c.substr(0,c.indexOf("=")));for(var k=0,d=0,b,l,e,g,f=0,a,h,m="";k<c.length;++k){l="="==c.charAt(k)?0:"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/".indexOf(c.charAt(k));d=(d+6)%8;if(6!=d){b+=l>>d;if(0==f)g=!0,h=0,e=1,128>b&&(e=0,h=b&64,g=!1);else if(128!=(b&192))return!1;for(a=32;g&&0<a;a>>=1)b&a?++e:g=!1;g||(a=6+6*f-e,6<a&&(a=6),a&&(h+=b%(1<<a)<<6*(e-f)));f==e?(m+=String.fromCharCode(h),f=0):++f}b=d?l%(1<<d)<<8-d:0}return m}

PS:
$json = json_encode($data, JSON_HEX_TAG | JSON_HEX_APOS | JSON_HEX_QUOT | JSON_HEX_AMP | JSON_UNESCAPED_UNICODE); ///вот так - не работает?!
Ответ написан
gzhegow
@gzhegow Автор вопроса
aka "ОбнимиБизнесмена"
php:
$base64json = base64_encode(json_encode($php_array));


template:
<script>
  JSON.parse(atob('<?=$base64json;?>'));
</script>
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы