| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > PHP: Общие вопросы > Что может быть со слешами? |
| Автор: VotVam 16.8.2009, 14:22 |
| Ситуация такова. Есть стандартный скрипт SMF по открытию топиков в форуме. Добавил в него одно поле "descr" и полностью продублировал его свойства и поведение с поля "subject", т.к. назначения сходны (как здесь - тема и описание темы). На локали проверяю - все работает как часы. Ставлю на сервер - начинают сыпать ошибки. Если в общих чертах, то кавычки в поле "descr" приводят к появлению двойных обратных слешей, что ведет к ошибке записи в базу. Убираю двойные слеши stripslashes(), после этого addslashes() как бы "не видит" кавычки и опять ошибка. Кодировка на сервере выствавлена принудительно Windows 1251. Вопрос: откуда берется двойной слеш возле двойной кавычки именно на сервере и как с этим бороться? Повторюсь: на локали все летает. |
| Автор: Ипатьев 16.8.2009, 14:41 |
| Двойной слеш берется от волшебных кавычек. При этом ошибки быть не должно, ни в том, ни в другом случае. Следовательно, виновата неправильная обработка входящих данных. Подробнее сказать нельзя, поскольку кое-кто не сообразил сообщить, какая именно ошибка возникает, и в каком виде данные попадают в запрос. |
| Автор: VotVam 16.8.2009, 15:22 |
| magic - все три off, да я еще и в хтакцесс их придушил. Скрипт вылетает с ошибкой hack... и т.д., но это искать лениво - что именно срабатывает . А запись в базу пытается производить типа descr='Я вам \\"пишу\\" - чего же боле?'. Если я убиваю слеши stripslashes(), то после этого addslashes() уже не срабатывает и в базу лезет descr='Я вам "пишу" - чего же боле?'. Я вроде все внятно описал. |
| Автор: Ипатьев 16.8.2009, 15:37 |
Бесподобно. Как же, все-таки, неожиданно мало на этом форуме программистов... |
| Автор: VotVam 16.8.2009, 15:40 |
| А чему удивляться? Сборка SMF ~ 5мб кода. На кой хрен его лопатить, если видно: в чем проблема? |
| Автор: Ипатьев 16.8.2009, 15:47 |
| И то правда. Тем более - можно себе представить - какого кода. |
| Автор: VotVam 16.8.2009, 16:12 |
| Да код-то как раз нормальный. Проблема не в нем - 100%. Скорее всего что-то криво на этом сервере (так же как и сессии), а что - вот бы хотелось что понять? Почему не срабатывает addslashes()? Почему не срабатывает mysql_real_escape_string()? Тут или кодировка не того, или вообще уже не пойму где. А код я проверил - там даже есть защита от "\\", только она тоже не срабатывает. Следовательно язык, с которым сервер общается с мускулом - арабо-китайский - твоя моя не понимай. |
| Автор: nerezus 16.8.2009, 18:40 | ||||||||||
Если сервер настроен криво и добавляет \, то перед ней при обработке тоже бы добавлялась \ и ошибок бы не было.
Выложи phpinfo. |
| Автор: VotVam 16.8.2009, 18:59 |
| Если бы мне нужна была чья-то доработка - я бы взял готовый скрипт типа IPB и не лез бы никуда. Я специально связался с SMF, потому что там все на функциях и все понятно как божий день. Поэтому когда пишешь addslashes() (кстати от балды первое, что пришло в голову - то и сунул), то на локали тут же срабатывает. Причем на локали вообще без всяких костылей все работает, как-будто кавычек и нет вовсе. Проблемы начинаются на сервере. Во-первых, появляется этот двойной слеш, хотя обработка "ошибочной" переменной идет наравне с другими переменными. А потом, при попытке убить этот слеш, или совсем убираются слеши или остается также. Что это за поведение PHP? Я до сих пор грешу на сессии, которые все еще не могу добиться, чтобы писались как надо (папка на сервере для просмотра недоступна и идентификатор периодически вываливается в строку запроса). Сначала поправлю сессии, а потом буду методично перебирать все, что уже наизменял в SMF. Я просто думал, что кто-то сталкивался с такой ерундой, поэтому и написал тут. |