Модераторы: skyboy, MoLeX, Aliance, ksnk
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> чудеса со stripslashes 
:(
    Опции темы
Wolf1994
Дата 29.7.2005, 15:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1701
Регистрация: 5.10.2004

Репутация: 7
Всего: 29



Не понимаю как работает собственная гостевая smile
Вот пример:
Код

$temp="ok"."\r\n"."ok";
$temp=htmlspecialchars ($temp);
$temp=Mysql_escape_string ($temp);
$temp=str_replace ("\r\n", "<br>", stripcslashes(stripslashes($temp)));
echo $temp;

Результат работы - строка не переносится.
Но, если поменять stripcslashes со stripslashes местами:
Код

$temp="ok"."\r\n"."ok";
$temp=htmlspecialchars ($temp);
$temp=Mysql_escape_string ($temp);
$temp=str_replace ("\r\n", "<br>", stripslashes(stripcslashes($temp)));
echo $temp;

То - перносится.
Интересно, что в гостевой перенос нормально осуществляется и в первом случае. Может дело в том, что там скрипт работает с переменными из базы MySQL... но на моём форуме тоже с переменными MySQL такой эффект происходит только во втором случае.
Уверен, что загадка решается гениально просто, но сам ничем объяснить это не могу.
PM MAIL WWW   Вверх
Mal Hack
Дата 29.7.2005, 17:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Мудрый...
****


Профиль
Группа: Участник Клуба
Сообщений: 9926
Регистрация: 15.2.2004

Репутация: 122
Всего: 261



А зачем?
1. С помощью htmlspecialchars ты заменил все < > & и т.п. на их коды, это правильно.
2. С помощью mysql_escape_string ты проэскепил строку под MySQL.
3. Через str_replace ты можешь заменить \n\r на <br>, но ты stripslashes отменяешь mysql_escape_string, что не нужно.
4. Когда ты меняешь \n\r на <br> надо менять на <br>\n, т.к. чтобы при последующем редактировании файла у тебя не было бы всего кода в одну строку.
PM ICQ   Вверх
Wolf1994
Дата 29.7.2005, 18:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1701
Регистрация: 5.10.2004

Репутация: 7
Всего: 29



Цитата
3. Через str_replace ты можешь заменить \n\r на <br>, но ты stripslashes отменяешь mysql_escape_string, что не нужно.

На самом деле, эскапирую я строку при внесении в базу, а удаляю лишнее при выводе информации на экран. Это просто я привёл всё сразу для демонстрации принципа.

Цитата
4. Когда ты меняешь \n\r на <br> надо менять на <br>\n, т.к. чтобы при последующем редактировании файла у тебя не было бы всего кода в одну строку.

При редактировании файла я просто беру из базы строку как есть, до выполнения str_replace на <br>.

Похоже я действительно встретился с очень сложной, хотя и легко обходимой проблемой. Но всё-таки я во всём этом запутался. Как можно объяснить что от перестановки stripов "str_replace ("\r\n", "<br>", stripslashes(stripcslashes($temp)));" либо срабатывает, либо нет?
PM MAIL WWW   Вверх
Mal Hack
Дата 29.7.2005, 18:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Мудрый...
****


Профиль
Группа: Участник Клуба
Сообщений: 9926
Регистрация: 15.2.2004

Репутация: 122
Всего: 261



Цитата(Wolf1994 @ 29.7.2005, 19:19)
Как можно объяснить что от перестановки stripов "str_replace ("\r\n", "<br>", stripslashes(stripcslashes($temp)));" либо срабатывает, либо нет?

А зачем ты вообще это делаешь?
При вставке в БД у тебя должн быть:
Код
$temp=Mysql_escape_string ($temp);

При выимке и редактировании:
Код
$temp=htmlspecialchars ($temp);

При выимке и показе пользователю:
Код
$temp=htmlspecialchars ($temp);
$temp = str_replace( "\r" , "" , $temp );
$temp=str_replace ("\n", "<br>", $temp);


Все.
PM ICQ   Вверх
Wolf1994
Дата 30.7.2005, 21:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1701
Регистрация: 5.10.2004

Репутация: 7
Всего: 29



Да. Я делаю всё как ты описал. stripы я применяю именно при выимке из базы. Всё в одну кучу собрал чтобы было нагляднее тестировать. Кстати, я заметил, что при отображении stripCslashes не подсвечивается - может это вообще "левая" функция.
PM MAIL WWW   Вверх
Mal Hack
Дата 30.7.2005, 21:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Мудрый...
****


Профиль
Группа: Участник Клуба
Сообщений: 9926
Регистрация: 15.2.2004

Репутация: 122
Всего: 261



Цитата(Wolf1994 @ 30.7.2005, 22:35)
Кстати, я заметил, что при отображении stripCslashes не подсвечивается - может это вообще "левая" функция.

Нет не левая.
Цитата
stripcslashes
Un-quote string quoted with addcslashes (PHP 4 , PHP 5)

string stripcslashes ( string str )

Returns a string with backslashes stripped off. Recognizes C-like \n, \r ..., octal and hexadecimal representation.

See also addcslashes().


PM ICQ   Вверх
Wolf1994
Дата 30.7.2005, 21:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1701
Регистрация: 5.10.2004

Репутация: 7
Всего: 29



Теперь понятно почему деформируются тэги \r\n. Но у меня на хостинге без stripCslashes, почему-то не вырезаются обычные слэши - / smile
PM MAIL WWW   Вверх
Mal Hack
Дата 30.7.2005, 21:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Мудрый...
****


Профиль
Группа: Участник Клуба
Сообщений: 9926
Регистрация: 15.2.2004

Репутация: 122
Всего: 261



Цитата(Wolf1994 @ 30.7.2005, 22:54)
почему-то не вырезаются обычные слэши - / smile

мистика, быть того не может.
PM ICQ   Вверх
Wolf1994
Дата 30.7.2005, 22:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1701
Регистрация: 5.10.2004

Репутация: 7
Всего: 29



Да. Но именно этой функцией мне порекомендовали пользоваться, когда я написал, что stripslashes работают у меня только на Денвере, а на хостинге почему-то не срабатывают. Я сделал как сказали и, заработало! Если говорить о мистике, то вот пример с которым я столкнулся 10 минут назад: "strlower" срабатывает на хостинге только для латиницы.
PM MAIL WWW   Вверх
Mal Hack
Дата 30.7.2005, 23:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Мудрый...
****


Профиль
Группа: Участник Клуба
Сообщений: 9926
Регистрация: 15.2.2004

Репутация: 122
Всего: 261



Цитата(Wolf1994 @ 30.7.2005, 23:13)
"strlower" срабатывает на хостинге только для латиницы.

Код

 setlocale(LC_ALL, "ru_RU.CP1251"); 

PM ICQ   Вверх
Wolf1994
Дата 30.7.2005, 23:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1701
Регистрация: 5.10.2004

Репутация: 7
Всего: 29



Спасибо. По крайней мере, одна проблема разрешилась.
PM MAIL WWW   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "PHP"
Aliance
IZ@TOP
skyboy
SamDark
MoLeX

Новичкам:

  • PHP редакторы собираются и обсуждаются здесь
  • Электронные книги по PHP, документацию можно найти здесь
  • Интерпретатор PHP, полную документацию можно скачать на PHP.NET

Важно:

  • Не брезгуйте пользоваться тегами [code=php]КОД[/code] для повышения читабельности текста/кода.
  • Перед созданием новой темы воспользуйтесь поиском и загляните в FAQ
  • Действия модераторов можно обсудить здесь

Внимание:

  • Темы "ищу скрипт", "подскажите скрипт" и т.п. будут переноситься в форум "Web-технологии"
  • Темы с именами: "Срочно", "помогите", "не знаю как делать" будут УДАЛЯТЬСЯ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, IZ@TOP, skyboy, SamDark, MoLeX, awers.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | PHP: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0809 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.