|
|
|
| Здравствуйте!
Строка извлекается из БД и печатается в тело 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, '\\\'"'); | |
|
|
|
|
|
|
|
для: "
(14.05.2009 в 20:41)
| | Так "в лоб", наверно, можно пойти.
Но PHP такой язык, где как правило, всё уже предусмотрено.
Просто у меня в мануале среди описания подобных функций ничего точно соответствующего задаче не нашлось. Но, скорее, это недостаток мануала или моих мыслительных способностей, а в PHP, скорее всего есть готовое решение. | |
|
|
|
|
|
|
|
для: Eugene77
(14.05.2009 в 20:04)
| | JS-метод escape() кодирует URI, либо массив строк включающих неалфавитно-цифровые символы (табуляция и т.п.) в виде %HEX-значение. При этом ни о каком переводе из одной кодовой страницы в другую речи и не идет.
А что вы пытаетесь сделать? И зачем mysql_real_escape_string при выборке из базы? | |
|
|
|
|
|
|
|
для: sim5
(15.05.2009 в 04:44)
| | Я при помощи PHP создаю на html странице JS функцию, которая содержит как составляющую часть строку извлечённоую из базы данных.
Вопрос в том, как правильно обработать эту строку,прежде чем вносить её в JS.
P.S. Кодировка строки в базе и кодировка html страницы могут различаться. | |
|
|
|
|
|
|
|
для: 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>";
|
| |
|
|
|
|
|
|
|
для: sim5
(15.05.2009 в 19:16)
| | Замечательная идея!
Пусть сам JS со своими спецсимволами разбирается.
Спасибо! | |
|
|
|
|
|
|
|
для: Eugene77
(15.05.2009 в 20:10)
| | Так о каких спецсимволах речь? У вас в базе что строка закодированная с помощью escape? | |
|
|
|
|
|
|
|
для: sim5
(15.05.2009 в 19:16)
| | Нет,не работает.
У меня не такая ситуация:
>echo "<script>document.write('".htmlspecialchars($s)."')</script>";
А вот такая:
<script>
function f() {
var v = '<? echo $s; ?>';
return;
}
</script>
Мне желательно внутрь функции вписать строку, постараться не делать её глобальной переменной | |
|
|
|
|
|
|
|
для: Eugene77
(15.05.2009 в 21:01)
| | Ну и на здоровье, какие проблемы? | |
|
|
|
|
|
|
|
для: sim5
(15.05.2009 в 21:05)
| | >Ну и на здоровье, какие проблемы?
100% проблемы
У меня не получается присвоить переменной JS значение при помощи конструкции document.write()
Если внутри функции это писать, то весь документ очищается при вызове функции, а если вне, то переменная так и остаётся неопределённой. | |
|
|
|
|
|
|
|
для: Eugene77
(16.05.2009 в 16:57)
| | Что содержит ваша $s? | |
|
|
|
|
|
|
|
для: sim5
(16.05.2009 в 17:23)
| | Произвольные символы:
теги, кавычки, \0 -
В принципе там всё будет, что имеет место быть в utf-8 и в HTML, а может и ещё сверх того, так как контроля нет. | |
|
|
|
|
|
|
|
для: 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>
|
| |
|
|
|
|
|
|
|
для: sim5
(16.05.2009 в 19:50)
| | Странно, что непонятно.
Ну, а если в строке $s будут,например, одинарные кавычки?
Будет ваш пример работать? | |
|
|
|
|
|
|
|
для: Eugene77
(16.05.2009 в 20:34)
| | А почему нет? Проверьте.
PS. Только их надо экранировать, или обрамлять вставку в JS двойными кавычками. Проблема из-за кавычек как раз? | |
|
|
|
|
|
|
|
для: sim5
(16.05.2009 в 20:59)
| | В первом приближении - да.
Из-за кавычек и некоторых других спецсимволов.
Полный список которых у меня не получается установить. | |
|
|
|
|
|
|
|
для: Eugene77
(16.05.2009 в 23:08)
| | var v = '<? echo addcslashes($s,"'"); ?>'; - мнемонизируйте что вам надо. | |
|
|
|
|
|
|
|
для: sim5
(17.05.2009 в 01:21)
| | >var v = '<? echo addcslashes($s,"'"); ?>'; - мнемонизируйте что вам надо.
Если б я знал,что мне надо!
Содержимое этой строки мне заранее неизвестно.
Как раз в том и вопрос: какой именно обработке следует её подвергнуть?
Вариант, который я использую, я указал в самом начале темы, но насколько он грамотен - уверенности нет.
Будет ли он работать всегда или через раз? | |
|
|
|
|
|
|
|
для: Eugene77
(17.05.2009 в 18:14)
| | Кавычки, одинарные или двойные, в зависимости от того, в какие обрамляется вставка. Угловые скобки в html-представление, если это не код. Остальное можете проверить в любом редакторе с подсветкой JS - сами убедитесь, будет ли остальное мешать вводу строки. | |
|
|
|
|
|
|
|
для: sim5
(18.05.2009 в 06:20)
| | У UTF-8 ещё бывает BOM
Он вроде бы в редакторе не отображается.
Странно, что мы тут с вами на кофейной гуще гадаем!
Неужели никому не попадался толклвый мануал по эскапингу? | |
|
|
|
|
|
|
|
для: Eugene77
(18.05.2009 в 12:12)
| | А что гадать, засуньте строку в JS редаторе - все "загадки" пропадут. Я лично не гадаю. | |
|
|
|
|
|
|
|
для: sim5
(18.05.2009 в 12:38)
| | Какую строку?
Все UTF символы в обоих представлениях? | |
|
|
|
|
|
|
|
для: Eugene77
(18.05.2009 в 18:54)
| | Да любую строку, хоть UTF, хоть наизнанку..... Ну вы же составляете строку в РНР, например, как только встретится немнемонизированная кавычка в нем, что будет с подсветкой в редакторе? Вот тоже самое и в JS будете наблюдать, и остальное наглядно увидите - будет ли другое разбивать строку? | |
|
|
|
|
|
|
|
для: sim5
(18.05.2009 в 20:08)
| | В каком редакторе, например?
В "Expert Editor" - глючная подсветка... | |
|
|
|
|
|
|
|
для: Eugene77
(20.05.2009 в 20:53)
| | Да в любом редакторе, который обеспечивает подсветку JS-кода, я пользуюсь HomeSite. | |
|
|
|