Автор Тема: передача строки в window.open()  (Прочитано 5675 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн dub

  • Фанат форума
  • Постоялец
  • ***
  • Сообщений: 236
  • +0/-0
  • 0
    • Просмотр профиля
    • http://binartis.com/
передача строки в window.open()
« : 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 "<a href=javascript:help(\'".$str."\')>Help</a>";

Пробовал urlencode():
$str urlencode($str);
echo 
"<a href=javascript:help(\'".$str."\')>Help</a>";


JavaScript выдает ошибку "Unterminated string constant". Это тем более примечательно, что прямая ссылка
echo "<a href=help.php?str=".$str.")>Help</a>";
работает замечательно.

В чем может быть проблема? И как нормальные люди обрабатывают строку предварительно в таких случаях, чтобы учесть любое содержание строки?

Оффлайн dub

  • Фанат форума
  • Постоялец
  • ***
  • Сообщений: 236
  • +0/-0
  • 0
    • Просмотр профиля
    • http://binartis.com/
передача строки в window.open()
« Ответ #1 : 06 Ноября 2002, 22:41:49 »
P.S. Интересно, кому пришла в голову мысль автоматичеки заменять в коде слово "javascript" на два слова "java script"? Интересные у меня получились рваные ссылочки Перемудрил кто-то.

Оффлайн Дмитрий Попов

  • Фанат форума
  • Старожил
  • ****
  • Сообщений: 264
  • +0/-0
  • 0
    • Просмотр профиля
    • http://www.programmist.spb.ru
передача строки в window.open()
« Ответ #2 : 06 Ноября 2002, 23:34:05 »
echo "")>Help";
 За Родину! За Россию!
SendMail для любого хостинга.

Оффлайн dub

  • Фанат форума
  • Постоялец
  • ***
  • Сообщений: 236
  • +0/-0
  • 0
    • Просмотр профиля
    • http://binartis.com/
передача строки в window.open()
« Ответ #3 : 07 Ноября 2002, 00:29:36 »
Дмитрий Попов
Так ведь echo уже находится внутри .
Это же пхпшная функция.

Да и вообще, прямая ссылка, написал же, работает. Не работает через яваскрипт.

Оффлайн Irina

  • Заглянувший
  • Новичок
  • *
  • Сообщений: 7
  • +0/-0
  • 0
    • Просмотр профиля
    • http://
передача строки в window.open()
« Ответ #4 : 07 Ноября 2002, 13:40:12 »
Например, echo "Help";
help($str) jawascript не понимает, это понятно только PHP, JS знает help(str).

Оффлайн Макс

  • vir magni ingenii
  • Глобальный модератор
  • Ветеран
  • *****
  • Сообщений: 3534
  • +0/-0
  • 2
    • Просмотр профиля
передача строки в window.open()
« Ответ #5 : 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";
First learn computer science and all the theory. Next develop a programming style. Then forget all that and just hack. ( George Carrette )

Оффлайн Irina

  • Заглянувший
  • Новичок
  • *
  • Сообщений: 7
  • +0/-0
  • 0
    • Просмотр профиля
    • http://
передача строки в window.open()
« Ответ #6 : 07 Ноября 2002, 18:15:37 »
Конечно, будет выдавать ошибку. Javascript не понимает, что такое $str, а PHP понимает. Если ты пишешь javascript:help(..., то help(str), а вообще лучше написать
echo "Help";
и не напрягать себя передачей параметров из PHP в JS.

Оффлайн Макс

  • vir magni ingenii
  • Глобальный модератор
  • Ветеран
  • *****
  • Сообщений: 3534
  • +0/-0
  • 2
    • Просмотр профиля
передача строки в window.open()
« Ответ #7 : 07 Ноября 2002, 19:04:25 »
Цитировать
Конечно, будет выдавать ошибку. Javascript не понимает, что такое $str, а PHP понимает.
я имел  ввиду написать:

echo "<a href ... onclick(\'"str_replace("\\n","\\\\n"urlencode($str))."\')> text </a>";
First learn computer science and all the theory. Next develop a programming style. Then forget all that and just hack. ( George Carrette )

Оффлайн Neter

  • Жустер
  • Старожил
  • ****
  • Сообщений: 324
  • +0/-0
  • 2
    • Просмотр профиля
передача строки в window.open()
« Ответ #8 : 08 Ноября 2002, 02:03:49 »
Ужас..
dub Этот текст берётся откудова?.. Может создашь БД и по АйДишнику передашь откудова чего выковыривать?.. Так ИМХО проще будет...

ЗЫ..
Текст ГЕТом, тоже самое что и .. и... ну вобщем изврат это всё...
Мне тормоз послужил толчком...

Оффлайн dub

  • Фанат форума
  • Постоялец
  • ***
  • Сообщений: 236
  • +0/-0
  • 0
    • Просмотр профиля
    • http://binartis.com/
передача строки в window.open()
« Ответ #9 : 08 Ноября 2002, 03:39:04 »
Irina
Если ты присмотришся к приведенному в самом начале коду, то увидишь, что там написано:
echo "<a href=javascript:help(\'".$str."\')>Help</a>";
То есть, находясь в PHP-коде, мы передаем строковую переменную $str (понятную PHP, тут я с тобой согласен) функции echo() (тоже, кстати, функции PHP).
А уже в свою очередь функция echo() генерирует html-код со ссылкой на функцию help() (фукнцию javascript), в которую передается содержимое этой самой переменной, причем в одинарные кавычки.
Таким образом, если переменная $str в PHP-коде содержала "блаблабла", то сгенерированная ссылка будет выглядеть следующим образом:
Help
То, что в яваскрипте названию переменных не предшествует знак доллара, я и так знаю. Это, прости, к делу не относится, хотя и спасибо за попытку.

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


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

Neter
Текст гетом - изврат? Пожалуй. Только проблема в том, что этот текст считается известным только в момент обработки скрипта. Не раньше. Скрипт получает массив данных, среди которых - текст, который - как угодно - надо мочь вывести в дополнительном окошке. До конца существования скрипт должен что-то годное для этого сгенерировать.
Что ж их - постом передавать, что ли? Да и куда? Во вновь открытое окошко? Вот откуда появилась мысль про гет.

Оффлайн dub

  • Фанат форума
  • Постоялец
  • ***
  • Сообщений: 236
  • +0/-0
  • 0
    • Просмотр профиля
    • http://binartis.com/
передача строки в window.open()
« Ответ #10 : 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 "<a href=java script:help(\'".$str."\')>Help</a>";
echo 
"<a href=help.php?str=".$str.")>Help</a>";


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


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

В чем загвоздка?

Оффлайн dub

  • Фанат форума
  • Постоялец
  • ***
  • Сообщений: 236
  • +0/-0
  • 0
    • Просмотр профиля
    • http://binartis.com/
передача строки в window.open()
« Ответ #11 : 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\');


Кросс-языковая получилась тема, ничего не скажешь.
Всем спасибо.

Оффлайн Макс

  • vir magni ingenii
  • Глобальный модератор
  • Ветеран
  • *****
  • Сообщений: 3534
  • +0/-0
  • 2
    • Просмотр профиля
передача строки в window.open()
« Ответ #12 : 08 Ноября 2002, 18:13:24 »
Цитировать
\'+escape(str),
с русским языком нормально работает?
First learn computer science and all the theory. Next develop a programming style. Then forget all that and just hack. ( George Carrette )

Оффлайн dub

  • Фанат форума
  • Постоялец
  • ***
  • Сообщений: 236
  • +0/-0
  • 0
    • Просмотр профиля
    • http://binartis.com/
передача строки в window.open()
« Ответ #13 : 08 Ноября 2002, 20:09:06 »
Макс
Да. И с украинским.

 

Sitemap 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28