Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
Социальная инженерия и социальные хакеры. Авторы: Кузнецов М.В., Симдянов И.В. Объектно-ориентированное программирование на PHP. Авторы: Кузнецов М.В., Симдянов И.В. PHP 5. На примерах. Авторы: Кузнецов М.В., Симдянов И.В., Голышев С.В. MySQL 5. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. Самоучитель PHP 5 / 6 (3 издание). Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум PHP

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Escape для JS
 
 автор: Eugene77   (14.05.2009 в 20:04)   письмо автору
 
 

Здравствуйте!
Строка извлекается из БД и печатается в тело JS функции,обрамляясь одинарными кавычками.

Я подготавливаю её таким образом:
<?
echo iconv("$database_charset""$page_charset"mysql_real_escape_string($string_from_db));

Насколько это плохо?
Вроде бы полного аналога JS escape() в PHP нет, а кажется, что надо бы...
Подскажите, грамотное преобразование для JS!

  Ответить  
 
 автор: "   (14.05.2009 в 20:41)
 
   для: Eugene77   (14.05.2009 в 20:04)
 

имхо, порядок "экранирование, изменение кодировки" считаю не совсем верным, хоть и скорее всего не ощутите разницу. экранируют обычно в последнуюю очередь.

вообще вопрос, согласитесь, чисто для раздела JavaScript. Вы хотите узнать от нас правила экранирования символов именно в этом языке. Я специально поискал для вас в гугл и нашел: \, ', ", т.е. $esc_str = addCslashes($str, '\\\'"');

  Ответить  
 
 автор: Eugene77   (14.05.2009 в 21:25)   письмо автору
 
   для: "   (14.05.2009 в 20:41)
 

Так "в лоб", наверно, можно пойти.
Но PHP такой язык, где как правило, всё уже предусмотрено.
Просто у меня в мануале среди описания подобных функций ничего точно соответствующего задаче не нашлось. Но, скорее, это недостаток мануала или моих мыслительных способностей, а в PHP, скорее всего есть готовое решение.

  Ответить  
 
 автор: sim5   (15.05.2009 в 04:44)   письмо автору
 
   для: Eugene77   (14.05.2009 в 20:04)
 

JS-метод escape() кодирует URI, либо массив строк включающих неалфавитно-цифровые символы (табуляция и т.п.) в виде %HEX-значение. При этом ни о каком переводе из одной кодовой страницы в другую речи и не идет.
А что вы пытаетесь сделать? И зачем mysql_real_escape_string при выборке из базы?

  Ответить  
 
 автор: Eugene77   (15.05.2009 в 18:50)   письмо автору
 
   для: sim5   (15.05.2009 в 04:44)
 

Я при помощи PHP создаю на html странице JS функцию, которая содержит как составляющую часть строку извлечённоую из базы данных.

Вопрос в том, как правильно обработать эту строку,прежде чем вносить её в JS.

P.S. Кодировка строки в базе и кодировка html страницы могут различаться.

  Ответить  
 
 автор: sim5   (15.05.2009 в 19:16)   письмо автору
 
   для: Eugene77   (15.05.2009 в 18:50)
 

Да никак, передавайте ее в той кодировке в какой работает страница, а остальное:
<?
//так
$s "Text and \"text\"";
//или так
$s 'Text and "text"';
//так
echo "<script>document.write('".$s."')</script>";
//или так
echo "<script>document.write('".htmlspecialchars($s)."')</script>";

  Ответить  
 
 автор: Eugene77   (15.05.2009 в 20:10)   письмо автору
 
   для: sim5   (15.05.2009 в 19:16)
 

Замечательная идея!
Пусть сам JS со своими спецсимволами разбирается.

Спасибо!

  Ответить  
 
 автор: sim5   (15.05.2009 в 20:26)   письмо автору
 
   для: Eugene77   (15.05.2009 в 20:10)
 

Так о каких спецсимволах речь? У вас в базе что строка закодированная с помощью escape?

  Ответить  
 
 автор: Eugene77   (15.05.2009 в 21:01)   письмо автору
 
   для: sim5   (15.05.2009 в 19:16)
 

Нет,не работает.

У меня не такая ситуация:
>echo "<script>document.write('".htmlspecialchars($s)."')</script>";

А вот такая:
<script>
function f() {
var v = '<? echo $s; ?>';
return;
}
</script>

Мне желательно внутрь функции вписать строку, постараться не делать её глобальной переменной

  Ответить  
 
 автор: sim5   (15.05.2009 в 21:05)   письмо автору
 
   для: Eugene77   (15.05.2009 в 21:01)
 

Ну и на здоровье, какие проблемы?

  Ответить  
 
 автор: Eugene77   (16.05.2009 в 16:57)   письмо автору
 
   для: sim5   (15.05.2009 в 21:05)
 

>Ну и на здоровье, какие проблемы?

100% проблемы
У меня не получается присвоить переменной JS значение при помощи конструкции document.write()

Если внутри функции это писать, то весь документ очищается при вызове функции, а если вне, то переменная так и остаётся неопределённой.

  Ответить  
 
 автор: sim5   (16.05.2009 в 17:23)   письмо автору
 
   для: Eugene77   (16.05.2009 в 16:57)
 

Что содержит ваша $s?

  Ответить  
 
 автор: Eugene77   (16.05.2009 в 19:18)   письмо автору
 
   для: sim5   (16.05.2009 в 17:23)
 

Произвольные символы:
теги, кавычки, \0 -
В принципе там всё будет, что имеет место быть в utf-8 и в HTML, а может и ещё сверх того, так как контроля нет.

  Ответить  
 
 автор: sim5   (16.05.2009 в 19:50)   письмо автору
 
   для: Eugene77   (16.05.2009 в 19:18)
 

Если честно, ничего не понятно, в чем проблемы....
<?
$s 
"Text and \"text\"";
?>
<script>
function f() {
var v = '<? echo $s?>';
alert(v);
}
</script>
<a onclick="f()">Function</a>

  Ответить  
 
 автор: Eugene77   (16.05.2009 в 20:34)   письмо автору
 
   для: sim5   (16.05.2009 в 19:50)
 

Странно, что непонятно.
Ну, а если в строке $s будут,например, одинарные кавычки?
Будет ваш пример работать?

  Ответить  
 
 автор: sim5   (16.05.2009 в 20:59)   письмо автору
 
   для: Eugene77   (16.05.2009 в 20:34)
 

А почему нет? Проверьте.

PS. Только их надо экранировать, или обрамлять вставку в JS двойными кавычками. Проблема из-за кавычек как раз?

  Ответить  
 
 автор: Eugene77   (16.05.2009 в 23:08)   письмо автору
 
   для: sim5   (16.05.2009 в 20:59)
 

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

  Ответить  
 
 автор: sim5   (17.05.2009 в 01:21)   письмо автору
 
   для: Eugene77   (16.05.2009 в 23:08)
 

var v = '<? echo addcslashes($s,"'"); ?>'; - мнемонизируйте что вам надо.

  Ответить  
 
 автор: Eugene77   (17.05.2009 в 18:14)   письмо автору
 
   для: sim5   (17.05.2009 в 01:21)
 

>var v = '<? echo addcslashes($s,"'"); ?>'; - мнемонизируйте что вам надо.

Если б я знал,что мне надо!
Содержимое этой строки мне заранее неизвестно.
Как раз в том и вопрос: какой именно обработке следует её подвергнуть?
Вариант, который я использую, я указал в самом начале темы, но насколько он грамотен - уверенности нет.
Будет ли он работать всегда или через раз?

  Ответить  
 
 автор: sim5   (18.05.2009 в 06:20)   письмо автору
 
   для: Eugene77   (17.05.2009 в 18:14)
 

Кавычки, одинарные или двойные, в зависимости от того, в какие обрамляется вставка. Угловые скобки в html-представление, если это не код. Остальное можете проверить в любом редакторе с подсветкой JS - сами убедитесь, будет ли остальное мешать вводу строки.

  Ответить  
 
 автор: Eugene77   (18.05.2009 в 12:12)   письмо автору
 
   для: sim5   (18.05.2009 в 06:20)
 

У UTF-8 ещё бывает BOM
Он вроде бы в редакторе не отображается.
Странно, что мы тут с вами на кофейной гуще гадаем!
Неужели никому не попадался толклвый мануал по эскапингу?

  Ответить  
 
 автор: sim5   (18.05.2009 в 12:38)   письмо автору
 
   для: Eugene77   (18.05.2009 в 12:12)
 

А что гадать, засуньте строку в JS редаторе - все "загадки" пропадут. Я лично не гадаю.

  Ответить  
 
 автор: Eugene77   (18.05.2009 в 18:54)   письмо автору
 
   для: sim5   (18.05.2009 в 12:38)
 

Какую строку?
Все UTF символы в обоих представлениях?

  Ответить  
 
 автор: sim5   (18.05.2009 в 20:08)   письмо автору
 
   для: Eugene77   (18.05.2009 в 18:54)
 

Да любую строку, хоть UTF, хоть наизнанку..... Ну вы же составляете строку в РНР, например, как только встретится немнемонизированная кавычка в нем, что будет с подсветкой в редакторе? Вот тоже самое и в JS будете наблюдать, и остальное наглядно увидите - будет ли другое разбивать строку?

  Ответить  
 
 автор: Eugene77   (20.05.2009 в 20:53)   письмо автору
 
   для: sim5   (18.05.2009 в 20:08)
 

В каком редакторе, например?
В "Expert Editor" - глючная подсветка...

  Ответить  
 
 автор: sim5   (21.05.2009 в 04:59)   письмо автору
 
   для: Eugene77   (20.05.2009 в 20:53)
 

Да в любом редакторе, который обеспечивает подсветку JS-кода, я пользуюсь HomeSite.

  Ответить  
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования