http://www.php.ru/forum/viewtopic.php?p=225564#225564 по некоторым полям (но не по всем) нужно пройтись htmlspecialchars. Как это дело упростить?
PHP: $json = array(); $json['name'] = htmlspecialchars($name); $json['second name'] = htmlspecialchars($second); $json['html'] = $other_html_code; die(json_encode($json)); Koc так чем не устраивает?
Ребяты... Ну блин, я ж просил, не пишите тут своё... создайте топик, общайтесь, в PM общайтесь... Ну мне этот вопрос важен, а вы свои проблемы решаете... Щас модерам напишу.
phpdude как и где делать шаблонризатор для json ? В json_encode уже передаются данные, которые заэкранированы, приведены к нужному формату. Но это приведение и экранирование где и как делаешь? Есть ли варианты не копирования чистых данных, ибо в найтив хтмл шаблонизаторе они есть!?
kiosuki то, что они между собой флудить начали - значит тема себя исчерпала. Если при этом вы еще ждете каких-то постов по теме, значит надо переформулировать то, что вам непонятно, ибо все думают, что вы все поняли уже.
phpdude ну это простейший случай. А если уровень вложенности поболее? Тут нужно что-то типа автоэскепинга с возможностью его отключить для определенных ключей...
Koc когда-то у Андрея спрашивал, оно говорил что объекты ответа знают о типах данных которые отдают и производят автокодинг. Но это, скорее всего, катит для стандартных каких то штук
Koc исходя из этого, мне иногда кажется, что поше делать для json отдельные экшены, как в принципе и говорил НГР!
думаю что при нагрузке в 50 кхитов в секунду, такая херня сгубит проц или память, чем меньше делаем - тем стабильнее работаем вечно ты себе грабли придумываешь, живи настоящим я не возможным будущим
и не поверишь, он был прав ложку в один стакан, вилки в другой, иначе выборка ложки из стакана становится сложнее. вроде все как и в жизни, а выдумываете какие то реально грабли. модель возвращает данные, ты их во вьюхе (допустим она обрабатывает) жсоновской экранируешь и отдаешь наружу
Костян это и в психологии так пишут и везде насколько я знаю)) тольк овот придумывать себе стены а потом пытаться ломать у нас в крови нет чтобы просто идти дальше по дороге, мы все равно хотим препятствия
и при этод данные брать из экшена для хтмл, например, для того, чтобы не писать лишнее (ну это если выборка хтмл экшене соответствует аджакс задаче). Поэтому и получается, что отдельный экшен и есть json представление, но дублирования данных тут можно и не избежать.
Костян если уж вам сильно хочется "шаблонизации" аля htmlspecchars применить к какому то ключу, то сделайте "свою" json_encode, которая работает например с ключами массива например так $json[':?name'] = применяем htmlspec $json['::?name'] = urlencode $json['\?name'] = addslashes ну и так далее, только чтобы полное гавно не получилось, а то снова че нить придумывать придется
применить такой "шаблонизатор", можно через замечательную функцию array_walk_recursive, если проставить великолепные значки & в параметры функции
да, круто бы было, но не думаю что уж очень круто, ибо всё равно придется описывать частные случаи - от этого не уйти, зато array_walk_recursive сможет секономить память...
а завтра мы добавляем XML. И че? ебашим еще по одному экшену для этого формата? Как я это вижу: PHP: <?php abstract class Api_Controllers_Abtract extends Framework_Controller { protected function _getFormat() { $formats = $this->context->get('api.formats'); $default = $this->context->get('api.default_format'); $format = $this->context->request()->get('format', $default); if (!in_array($format, $formats)) { $this->_responseError('Формат бла-бла не поддерживается'); } return $format; } } class Friends_Controllers_Api extends Api_Controllers_Abtract { public function getAction() { /** * totalCount : 100500 * items * 1 : * name : vasya * gender : 1 * signature : <img src="userbar.jpg" /> * 2 : * name : ivan * gender : 1 * signature : <b>ebashu saiti za edu</b> */ $data = $this->context->model()->friends() ->select($this->_getFields()) ->where('id', '=', $this->_getId()) ->limit($this->_getLimit()) ->offset($this->_getOffset()); $this->context->escaper()->autoescape(true) ->escapeMap($data, array('items.%key%.signature')); // второй параметр - поля, которые нужно игнорировать и не эскейкить return $this->context->view($this->_getFormat()) ->render($data); } }
да ни в чём. Я всё понял - один хрен надо описывать частные случаи.... Я придумаю что то, вернее уже почти придумал....
По форуму можно поискать http://www.php.ru/forum/viewtopic.php?t ... t=highload http://www.php.ru/forum/viewtopic.php?t ... t=highload