Forum Webscript.Ru

Программирование => PHP => Тема начата: dub от 06 Ноября 2002, 22:34:37

Название: передача строки в window.open()
Отправлено: dub от 06 Ноября 2002, 22:34:37
Задача. Скрипт получает из массива строку с текстом подсказки. Строка может содержать что угодно: текст латиницей или кирилицей, разделители (переносы, табуляции..), кавычки всевозможные и т. д.

Например:
$str = "Подсказка:
Вышел месяц из тумана,
Вынул ножик из кармана..";

Эту строку нужно добавить к урлу, как переменную $str, которая методом get передается скрипту help.php, то есть:
help.php?str=....

Но не просто все. Этот самый help.php нужно открыть в новом окошке с помощью JavaScript функции window.open().

Есть функция:
funtion help(str) {
window.open(\'help.php?str=\'+str, \'width=400,height=200,resizable=0,scrollbars=1\');
}


Вопрос: как предварительно обработать строку для того, чтобы сгенерировать работающую ссылку типа
echo "Help";

Пробовал urlencode():
$str = urlencode($str);
echo "Help";

JavaScript выдает ошибку "Unterminated string constant". Это тем более примечательно, что прямая ссылка
echo "Help";
работает замечательно.

В чем может быть проблема? И как нормальные люди обрабатывают строку предварительно в таких случаях, чтобы учесть любое содержание строки?
Название: передача строки в window.open()
Отправлено: dub от 06 Ноября 2002, 22:41:49
P.S. Интересно, кому пришла в голову мысль автоматичеки заменять в коде слово "javascript" на два слова "java script"? Интересные у меня получились рваные ссылочки Перемудрил кто-то.
Название: передача строки в window.open()
Отправлено: Дмитрий Попов от 06 Ноября 2002, 23:34:05
echo "")>Help";
Название: передача строки в window.open()
Отправлено: dub от 07 Ноября 2002, 00:29:36
Дмитрий Попов
Так ведь echo уже находится внутри .
Это же пхпшная функция.

Да и вообще, прямая ссылка, написал же, работает. Не работает через яваскрипт.
Название: передача строки в window.open()
Отправлено: Irina от 07 Ноября 2002, 13:40:12
Например, echo "Help";
help($str) jawascript не понимает, это понятно только PHP, JS знает help(str).
Название: передача строки в window.open()
Отправлено: Макс от 07 Ноября 2002, 14:24:53
мне пробовать лень, но ИМХО после urlencode()
str_replace("\\n","\\\\n", $str) нужно делать



ЗЫ
Для справки  :rolleyes: :
В переменных JS нельзя писать
var a = "bla bla bla
bla bla bla
la la la";
нужно писать
var a = "bla bla bla\\
bla bla bla\\
la la la";
Название: передача строки в window.open()
Отправлено: Irina от 07 Ноября 2002, 18:15:37
Конечно, будет выдавать ошибку. Javascript не понимает, что такое $str, а PHP понимает. Если ты пишешь javascript:help(..., то help(str), а вообще лучше написать
echo "Help";
и не напрягать себя передачей параметров из PHP в JS.
Название: передача строки в window.open()
Отправлено: Макс от 07 Ноября 2002, 19:04:25
Цитировать
Конечно, будет выдавать ошибку. Javascript не понимает, что такое $str, а PHP понимает.
я имел  ввиду написать:

echo " text ";
Название: передача строки в window.open()
Отправлено: Neter от 08 Ноября 2002, 02:03:49
Ужас..
dub Этот текст берётся откудова?.. Может создашь БД и по АйДишнику передашь откудова чего выковыривать?.. Так ИМХО проще будет...

ЗЫ..
Текст ГЕТом, тоже самое что и .. и... ну вобщем изврат это всё...
Название: передача строки в window.open()
Отправлено: dub от 08 Ноября 2002, 03:39:04
Irina
Если ты присмотришся к приведенному в самом начале коду, то увидишь, что там написано:
echo "Help";
То есть, находясь в PHP-коде, мы передаем строковую переменную $str (понятную PHP, тут я с тобой согласен) функции echo() (тоже, кстати, функции PHP).
А уже в свою очередь функция echo() генерирует html-код со ссылкой на функцию help() (фукнцию javascript), в которую передается содержимое этой самой переменной, причем в одинарные кавычки.
Таким образом, если переменная $str в PHP-коде содержала "блаблабла", то сгенерированная ссылка будет выглядеть следующим образом:
Help
То, что в яваскрипте названию переменных не предшествует знак доллара, я и так знаю. Это, прости, к делу не относится, хотя и спасибо за попытку.

А насчет
echo "";
я не очень понял. Что, собственно, должно произойти? Как браузер должен отработать такую двоякую ссылку?


Макс
Спасибо за инфу, не знал по поводу добавления еще слэшей. Только я вот о чем думаю: после urlencode() никаких \\n, которые можно было бы заменить на \\\\n, в строке не останется, потому как все переносы заменяются этой функцией на последовательность %0D%0A, что, подозреваю, соответствует \\n\\r.

Neter
Текст гетом - изврат? Пожалуй. Только проблема в том, что этот текст считается известным только в момент обработки скрипта. Не раньше. Скрипт получает массив данных, среди которых - текст, который - как угодно - надо мочь вывести в дополнительном окошке. До конца существования скрипт должен что-то годное для этого сгенерировать.
Что ж их - постом передавать, что ли? Да и куда? Во вновь открытое окошко? Вот откуда появилась мысль про гет.
Название: передача строки в window.open()
Отправлено: dub от 08 Ноября 2002, 16:14:07
Так-с, пока что обрабатываю строку следующим образом:
$str = str_replace("\\t", "", $str);
$str = str_replace("\\r", "", $str);
$str = str_replace("\\n", " ", $str);
$str = addslashes($str);
$str = urlencode($str);

Потом передаю в два варианта ссылки:
echo "
Help";
echo "Help";

На приемном конце (в help.php) обрабатываю обратным образом:
$help = urldecode($help);
$help = stripslashes($help);

Так вот.
Оба варианта нормально работают с латиницей. В первом случае нормально открывается окошко и номрамльно отображается строка.
А в случае с кирилицей второй вариант (прямая ссылка) работает нормально (переходит на страницу help.php и корректно выводит строку), а первый - открывает окошко и выводит в нем кашу, подобную "Iai?eia?: ".

В чем загвоздка?
Название: передача строки в window.open()
Отправлено: dub от 08 Ноября 2002, 17:00:41
Все. Понял.

Чтоб заставить работать второй вариант, добавляю в функцию javascript help() функцию escape(), которая еще раз представляет строку в виде последовательности ASCII-символов. Первый раз это далет функция php urlencode() - для html-вывода. Потом строка передается в функцию help(). Внутри этой функции строка снова существует в расшифрованном виде, и для того, чтобы открыть окно, в котором отобразится корректная ссылка, необходимо снова перевести строку в последовательность ASCII-символов, но уже средствами JavaScript.

Вносим изменения в help():

funtion help(str) {
window.open(\'help.php?str=\'+escape(str), \'width=400,height=200,resizable=0,scrollbars=1\');


Кросс-языковая получилась тема, ничего не скажешь.
Всем спасибо.
Название: передача строки в window.open()
Отправлено: Макс от 08 Ноября 2002, 18:13:24
Цитировать
\'+escape(str),
с русским языком нормально работает?
Название: передача строки в window.open()
Отправлено: dub от 08 Ноября 2002, 20:09:06
Макс
Да. И с украинским.