![]() |
|
Модераторы: skyboy, MoLeX, Aliance, ksnk |
![]()
|
|
| Selestin |
|
||||||||||||||||||||||||
|
Новичок Профиль Группа: Участник Сообщений: 9 Регистрация: 20.10.2010 Репутация: нет Всего: нет |
Добрый вечер!
Необходим совет. Ситуация довольно тривиальная для php программиста, я думаю каждый сталкивался с этим, но как решить эту задачу - я пока не понимаю. Суть: Существует некий Ajax скрипт, который отсылает запрос php скрипту, php скрипт в свою очередь генерирует javascript код, который по вызову onreadystatechange выполняется с помощью функции eval(). На этом Ajax запрос заканчивает свою работу. Возникло 2 вопроса: 1) Первый и самый важный. Допустим существует некая строка:
Ajax скрипт отсылает строку PHP скрипту с помощью POST запроса. Преобразования выполняемые перед отправкой: Заменим символы переноса строки на <br>, дабы записать данные в базу корректно, без лишних спец. символов, при этом сохранив смысл.
Обеспечим корректную кодировку запроса.
PHP скрипт: Загрузим POST переменную, ограничив длину в 50 символов, и сразу сконвертировав в нужную нам кодировку:
Запишем данные в базу, предварительно проэкранировав спецсимволы:
Строка сейчас имеет вид:
На этом работа PHP скрипта закончена, оповестим наш ajax, что данные записаны корректно, сгенерировав код выходного дива для дебага.
Вот тут то и начинается самая веселуха, дело в том, что отпечатав строку, хтмл выглядит так:
Образуется код вида:
HTML считает, что код онклика корректен до первой заэкранированной кавычки и вываливается в ошибку синтаксиса. Решения которые я вижу: 1) Добавить в строку str_replace("\\\"",""",$str), тогда кавычки заменятся на хтмл код, однако я не считаю это лучшим решением. 2) Добавить на выходе что-то типа htmlspecialchars(), Однако в этом случае строка будет выглядеть вот так:
Лишние палки оставшиеся от экранирования мне не нужны. Вопрос: Как корректно обрабатывать данные из базы, ведь из базы данные всегда будут экранированы \", дабы собрать корректный js вызов функции? Как вообще обычно решаются такие задачи? Второй вопрос: Как известно выполнение Ajax скрипта ловят с помощью функции onreadystatechange, однако написав ajax функцию мы заранее задаем поведение скрипта, например вот так:
Какой способ обычно используют, чтобы после успешно отработанного аякс запроса, выполнить нужную функцию. Ведь вызвать функцию, имеющую динамические аргументы, которые я получаю из аякс запроса, будет нельзя, т.к. в Ajax функции невозможно получить доступ к внешним переменным+это не безопасно, вдруг их значение измениться, а передавать сотни параметров в хидер AJAX запроса - не лучший вариант, ведь функций может быть много. Пока решаю эту проблему только Eval(), хороший ли это вариант? Пример функции:
Спасибо. Это сообщение отредактировал(а) Selestin - 21.10.2010, 00:10 |
||||||||||||||||||||||||
|
|||||||||||||||||||||||||
| Selestin |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 9 Регистрация: 20.10.2010 Репутация: нет Всего: нет |
1) Решено с помощью отката экранирования функцией stripslashes()
2) Актуально. |
|||
|
||||
| skyboy |
|
||||||
|
неОпытный ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 9820 Регистрация: 18.5.2006 Где: Днепропетровск Репутация: 75 Всего: 260 |
может, все же проблема в другом? код
успешно выводит
по меньшей мере в firefox. может, все ж проблема в javascript части? ты просто делаешь eval(responseText)? или как? |
||||||
|
|||||||
![]()
|
| Правила форума "PHP" | |
|
|
Новичкам:
Важно:
Внимание:
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, IZ@TOP, skyboy, SamDark, MoLeX, awers. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | PHP: Общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |