23.10.2018, 07:30 [+3 UTC]
в нашей команде: 3 032 чел. | участники онлайн: 2 (рекорд: 21)

:: РЕГИСТРАЦИЯ

:: задать вопрос

:: все разделы

:: правила

:: новости

:: участники

:: доска почёта

:: форум

:: блоги

:: поиск

:: статистика

:: наш журнал

:: наши встречи

:: наша галерея

:: отзывы о нас

:: поддержка

:: руководство

Версия системы:
7.51 (29.09.2018)

Общие новости:
24.09.2018, 16:49

Форум:
19.10.2018, 12:24

Последний вопрос:
21.10.2018, 21:37

Последний ответ:
22.10.2018, 13:51

Последняя рассылка:
23.10.2018, 03:15

Писем в очереди:
0

Мы в соцсетях:

Наша кнопка:

RFpro.ru - здесь вам помогут!

Отзывы о нас:
15.08.2017, 16:52 »
solest
Благодарю Вас за ответ и ссылки! [вопрос № 191278, ответ № 275196]
04.12.2009, 04:30 »
Brutuss
Спасибо большое! Обязательно учту ваши советы во время покупки! [вопрос № 174730, ответ № 257254]

РАЗДЕЛ • PHP / Perl / Python

Создание программ на языках PHP, Perl и Python.

[администратор рассылки: Коцюрбенко Алексей aka Жерар (Мастер-Эксперт)]

Лучшие эксперты в этом разделе

Асмик Гаряка
Статус: Советник
Рейтинг: 19
Evgen aka Chuma
Статус: 6-й класс
Рейтинг: 15
Хватов Сергей
Статус: Академик
Рейтинг: 3

Перейти к консультации №:
 

Консультация онлайн # 66607
Раздел: • PHP / Perl / Python
Автор вопроса: Талипов А Н
Отправлена: 12.12.2006, 07:38
Поступило ответов: 2

Здравствуйте!

Как удалить переносв строке или что нужно сделать, чтобы получился правильный js?Строка $msg произвольная вводимая пользователем.Нужно вывести её в том же самом виде (разве что забив на форматирование). Сама строка хранится в базе данных.

Мой вариант нормально работает с текстом в одну строку, но уже вторая смущает клиентский обработчик: "Объект не найден".

Приложение:

Состояние: Консультация закрыта

Ответ # 131192 от Королёв Руслан

Здравствуйте, Талипов А Н!
Нужно удалит все символы перевода каретки $msg=str_replace("\r\n","",$msg);


Консультировал: Королёв Руслан
Дата отправки: 12.12.2006, 09:44

Рейтинг ответа:

0

[подробно]

Сообщение
модераторам

Отправлять сообщения
модераторам могут
только участники портала.
ВОЙТИ НА ПОРТАЛ »
регистрация »

Ответ # 131415 от HookEst

Здравствуйте, Талипов А Н!
Посмотрите, в приложении функция, для корректного вывода в JS, и скрипт, который я использовал для проверки.
Вроде как все работает.
Если, что не пойдет, сообщите, пожалуйста.

Приложение:


Консультировал: HookEst
Дата отправки: 13.12.2006, 14:05

Рейтинг ответа:

0

[подробно]

Сообщение
модераторам

Отправлять сообщения
модераторам могут
только участники портала.
ВОЙТИ НА ПОРТАЛ »
регистрация »

Мини-форум консультации № 66607

Посетитель

ID: 18117

# 1

= общий = | 12.12.2006, 10:07 | цитировать цитировать  | профиль профиль  |  отправить письмо в личную почту пейджер

Спасибо, работает! Хотя мне пришлось немного адаптировать к моему случаю. Но вот, что интересно, предусматривает ли такая замена все случаи и не возникнет ли подобных ошибок в дальнейшем?


Посетитель

ID: 22917

# 2

= общий = | 14.12.2006, 05:45 | цитировать цитировать  | профиль профиль  |  отправить письмо в личную почту пейджер

Конечно же, нашел ошибку. SCRIPT надо разбивать независимо от регистра, тогда: function php2js($s,$q2=true) { $q=($q2?'"':"'"); return str_ireplace('script', $q.'+'.$q.'sc'.$q.'+'.$q.'ript', addcslashes($s,"\\\n\r\t".$q)); } где $s-строка которую нужно преобразовать; $q2-указатель кавычек(может не очень удобно, но каждый может сделать для себя); пишем например: echo "alert('".php2js($sometext, false)."')"; ДОПОЛНЕНИЕ/ИСПРАВЛЕНИЕ: str_ireplace - для PHP 5, для PHP 4 - можно использовать eregi_replace


Посетитель

ID: 18117

# 3

= общий = | 14.12.2006, 06:40 | цитировать цитировать  | профиль профиль  |  отправить письмо в личную почту пейджер

HookEst, мне не очень понятен синтаксис str_ireplace в вашей функции. Оно конечно работает, но хотелось бы понимать как именно. addcslashes по моему справочнику вообще имеет только один параметр, передаваемую для обработки строку. И потом, мой вопрос вообще не о конвертации скрипта, а о конвертации строки для скрипта. На форуме ввели сообщение в поле с использованием разных символов и переносов строк, а мне нужно вывести этот текст без повреждений или преобразований. Если я правильно разобрался с дополнительным синтаксисом addcslashes, в принципе можно наверное обойтись им, разве что заменив "\n" на "
". Только вот ln2br добавляет "
", а не "
" в старых версиях php. И по моему ещё нужно добавить обработку разрыва страницы #12 (как её обозначают не знаю). D html было с какими-то параметрами "
" не помню. Возможно есть и другие символы требующии коррекции.


Посетитель

ID: 22917

# 4

= общий = | 14.12.2006, 07:57 | цитировать цитировать  | профиль профиль  |  отправить письмо в личную почту пейджер

Скрипт я конвертировал просто потому, что текст скрипта - первая попавшаяся под руку большая строка с форматированием. Через функцию можно прогонять любые строки из PHP, они просто подделываются под синтаксис JS: < scr ipt> < ?='document.write("'.php2js($_POST['name']).'")'? > < / sc ript> str_ireplace: 1. 'script' - то что будем менять, 2. $q.'+'.$q.'sc'.$q.'+'.$q.'ript' - то, на что будем менять(здесь вместо $q - подставятся кавычки) 3. addcslashes($s,"\\\n\r\t".$q)-"заслэшенная" строка в которой будем менять. то есть, по сути str_ireplace просто разбивает слово SCRIPT на 2 части SC+RIPT, как и нужно писать в JS. по моему справочнику(php.net): addcslashes(не путать с addslashes) (PHP 4, PHP 5) string addcslashes ( string str, string charlist ) Возвращает сроку str, в которой перед каждым символом из перечисленных в charlist символов добавлен обратный слэш (\). Экранируются \n, \r и т.д. в стиле языка C, символы с ASCII менее 32 и более 126 преобразуются в восьмеричное представление. т.е. вторым параметром у меня идет список спецсимволов которые в JS мы бы писали со слэшем. - обратный слэш, конец строки, перевод каретки и кавычка того типа в которые заключена строка(а насчет \f,\b - надо смотреть, но они редко встречаются, будет время добавлю) .


Посетитель

ID: 18117

# 5

= общий = | 14.12.2006, 08:48 | цитировать цитировать  | профиль профиль  |  отправить письмо в личную почту пейджер

Я действительно перепутал функции. Теперь всё понятно, спасибо! Понятно кроме мелочи: @ то есть, по сути str_ireplace просто разбивает слово SCRIPT на 2 части SC+RIPT, как и нужно писать в JS. @ почему так "SC+RIPT"? Это чтобы не сработало как ключевое слово? Тоесть если эту функцию вставить в форум, то не один скрипт не будет работать? А если убрать разбиение, получается, что можно будет воткнуть любую свою функцию?


Посетитель

ID: 22917

# 6

= общий = | 14.12.2006, 09:46 | цитировать цитировать  | профиль профиль  |  отправить письмо в личную почту пейджер

Дело в том, что мы разбиваем не "ключевое слово", а только строковую константу JS. И функция эта поддерживает синтаксис не JS, а СТРОК JS которые Вы должны заключать в кавычки, на работу скрипта это никак не повлияет. А в строках JS тег скрипта надо разбивать потому, что когда парсер HTML парсит страницу и встречает открывающий тег SCRIPTа, он начинает искать закрывающий тег, и ищет он его по правилам HTML, а не JavaScript, ему все равно в кавычках этот тег(т.е. просто текст константа) или действительно конец скрипта. А JavaScript просто складывает SC+RIPT и нормально работает.


Посетитель

ID: 18117

# 7

= общий = | 14.12.2006, 10:07 | цитировать цитировать  | профиль профиль  |  отправить письмо в личную почту пейджер

Спасибо. Понял. Я раньше не знал, что такое нужно предусматривать. Кстати если заслешиваются символы после160, то сюда попадают русские буквы, что может очень сильно повлиять на размер. Нельзя ли как-нибудь это отключить? Или лучше придумать что-нибудь другое для кирилицы?


Посетитель

ID: 22917

# 8

= общий = | 14.12.2006, 10:28 | цитировать цитировать  | профиль профиль  |  отправить письмо в личную почту пейджер

Символы будут заслешиватся только те, которые мы указываем во втором параметре addcslashes, посмотрите HTML source, там где строки выводятся случайно, там есть символы с кодом от 1 до 255, и видно какие символы слешаться, а какие нет. p/s str_ireplace есть только для PHP 5, для ранней версии можно использовать eregi_replace


Посетитель

ID: 18117

# 9

= общий = | 14.12.2006, 10:42 | цитировать цитировать  | профиль профиль  |  отправить письмо в личную почту пейджер

Я не внимательно прочел. Не заслешиваются, а преобразуются в восьмеричный код. Немного выше так и написано @ символы с ASCII менее 32 и более 126 преобразуются в восьмеричное представление. @ Я имел в виду именно это преобразование в восьмеричное 126 и больше содержит русские буквы и спецсимволы. К сожалению у моего хостера именно php4. Тоесть я оставляю всё так же, только заменяю strireplace на eregi_replace? Или RegExp дребует ещё добавлений, (я с ним не знаком)?


Посетитель

ID: 22917

# 10

= общий = | 14.12.2006, 11:00 | цитировать цитировать  | профиль профиль  |  отправить письмо в личную почту пейджер

И в цифру будут преобразовываться только те символы, которые мы укажем. параметры eregi_replace такие же как у str_ireplace string eregi_replace ( string pattern, string replacement, string string ), в простейшем случае(как у нас) pattern может быть обычной строкой, то есть можно все оставить так же: function php2js($s,$q2=true) { $q=($q2?'"':"'"); return eregi_replace('script', $q.'+'.$q.'sc'.$q.'+'.$q.'ript', addcslashes($s,"\\\n\r\t".$q)); }

 

Возможность оставлять сообщения в мини-форумах консультаций доступна только после входа в систему.
Воспользуйтесь кнопкой входа вверху страницы, если Вы зарегистрированы или пройдите простую процедуру регистрации на Портале.

Яндекс Rambler's Top100

главная страница | поддержка | задать вопрос

Время генерирования страницы: 0.14790 сек.

© 2001-2018, Портал RFPRO.RU, Россия
Калашников О.А.  |  Гладенюк А.Г.
Версия системы: 7.51 от 29.09.2018