23.02.2019, 15:16 [+3 UTC]
в нашей команде: 3 403 чел. | участники онлайн: 5 (рекорд: 21)

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

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

все разделы

правила

новости

участники

доска почёта

форум

блоги

поиск

статистика

наш журнал

наши встречи

наша галерея

отзывы о нас

поддержка

руководство

Версия системы:
7.69 (10.02.2019)
JS-v.1.33 | CSS-v.3.35

Общие новости:
10.02.2019, 21:59

Форум:
23.02.2019, 14:53

Последний вопрос:
23.02.2019, 14:52
Всего: 148819

Последний ответ:
23.02.2019, 05:22
Всего: 257824

Последняя рассылка:
22.02.2019, 23:15

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

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

Наша кнопка:

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

Отзывы о нас:
18.05.2012, 19:29 »
Иван Васильевич Митяев
Спасибо!) [вопрос № 186092, ответ № 270882]
21.11.2010, 01:41 »
Мироненко Николай Николаевич
Хорошие варианты, будет с чего выбирать. Спасибо Вам большое smile [вопрос № 180820, ответ № 264193]

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

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

[администратор рассылки: Коцюрбенко Алексей Владимирович (Модератор)]

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

Коцюрбенко Алексей Владимирович
Статус: Модератор
Рейтинг: 678
SAW
Статус: 6-й класс
Рейтинг: 114
Степанов Иван /REDDS
Статус: 4-й класс
Рейтинг: 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
Артём Талипов

# 1

= общий = | 12.12.2006, 10:07

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

HookEst

# 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

Артём Талипов

# 3

= общий = | 14.12.2006, 06:40

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

HookEst

# 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 - надо смотреть, но они редко встречаются, будет время добавлю) .

Артём Талипов

# 5

= общий = | 14.12.2006, 08:48

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

HookEst

# 6

= общий = | 14.12.2006, 09:46

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

Артём Талипов

# 7

= общий = | 14.12.2006, 10:07

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

HookEst

# 8

= общий = | 14.12.2006, 10:28

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

Артём Талипов

# 9

= общий = | 14.12.2006, 10:42

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

HookEst

# 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.15734 сек.

© 2001-2019, Портал RFPRO.RU, Россия
Калашников О.А.  |  Гладенюк А.Г.
Версия системы: 7.69 от 10.02.2019
Версия JS: 1.33 | Версия CSS: 3.35