Консультация № 160715
17.02.2009, 15:36
0.00 руб.
0 17 2
Здравствуйте.
Скажите пожалуйста : когда я достаю строку из базы вида '1234567' ( $line['str']=="1234567") и подставляю ей в фунцию на яваскрипт у меня появляется ошибка "Незавершённая строковая константа" , но если просто не доставать эту строку. а записать так $str='1234567' и подставить $str в функцию на яваскрипт - то ошибки не будет. Когда я втавляю строку в базу то обрабатываю её htmlspecialchars($str) . У меня вопрос как надо обработать строку (наверное надо сделать), что бы избежать ошибки в яваскрипт?
Спасибо.

Обсуждение

Неизвестный
17.02.2009, 15:42
общий
Напишите код, которым Вы подставляете строку в функцию (я так полагаю, из php).
Неизвестный
17.02.2009, 15:55
общий


onmouseover="ddrivetip(\''.$line['$str'].'\');"

Неизвестный
17.02.2009, 15:56
общий
это ответ
Здравствуйте, Dima1967!
Возможно при доставании строки из базы, где-то в строке появляются символы переноса строки (типа \n) или подобные им, и когда строка вставляется в яваскрипт то у браузера получается что-то типа такого
foo = '1234567
';
на что браузер пытаясь исполнить яваскрипт обязательно ругнется так как не любит такого и хочет чтоб это выглядело так
foo = '1234567';
Попробуйте сделать проверку на символы переноса строки.
Неизвестный
17.02.2009, 16:13
общий
попробуйте так:
Код:

onmouseover="ddrivetip("<?=$line["$str"]?>")"


Это вариант когда Вы вставляете php-код прямо в html. Обратите внимание, что все двойные кавычки в параметре функции должны быть заменены на "
Неизвестный
17.02.2009, 16:15
общий
"Попробуйте сделать проверку на символы переноса строки." Сделал,это не то, я ещё повырезал все слэши \ - не помогло.

Вот полней код где эта строка используется $fm='

<DIV class=img-iluss

onmouseover="ddrivetip(\''.$line['$str'].'\');" onmouseout="hideddrivetip();" align=center>
<A target=_blank><IMG onmouseup="className=\''.$clicked.'\'" class=thumb src=Forum//Person_part'.$line["foto_m_pre"].' vspace=5 border=0 style="border-color:#FFFFFF;"></A></DIV>';
Неизвестный
17.02.2009, 16:16
общий
Иван Сергеевич, Сейчас попробую Ваш пример
Неизвестный
17.02.2009, 16:23
общий
это ответ
Здравствуйте, Dima1967!

onmouseover="ddrivetip(\''.$line['$str'].'\');"

а почему $line['$str'], а не $line['str'] ???
Неизвестный
17.02.2009, 16:27
общий
Не получается - та же ошибка.
Неизвестный
17.02.2009, 16:29
общий
а почему $line['$str'], а не $line['str'] ??? Я вам не правильно сказал,извините, у меня именно $line['str'] - т.е. так как надо.
Неизвестный
17.02.2009, 16:34
общий
$fm='<DIV class="img-iluss" onmouseover="ddrivetip("'.$line["str"].'");" onmouseout="hideddrivetip();" align=center>
<A target=_blank><IMG onmouseup="className="'.$clicked.'" class="thumb" src="Forum/Person_part'.$line["foto_m_pre"].'" vspace=5 border=0 style="border-color:#FFFFFF;"></A></DIV>';

PS. С экранированием Вы уж очень переборщили. И не забывайте брать значения HTML-свойств в кавычки.
Неизвестный
17.02.2009, 16:54
общий
Не получается выдаёт "Синтаксическая ошибка " ,при печати получается :
<TD style="padding:4px;vertical-align:center;text-align:center;font-size:12px;font-family: Verdana, Arial, Helvetica, sans-serif;border: 1px solid #EEF7F7;"><DIV class="img-iluss" onmouseover="ddrivetip("Австралийский Большой Барьерный риф - самый большой коралловый риф в мире. Он имеет длину 2027 км. и состоит из тысяч отдельных коралловых рифов. Самая жаркая точка на планете - Марбл-Бар, Западная Австралия. Озеро Эйр - самое сухое озеро мира, большую часть года оно покрыто соляной коркой почти в 4 метра толщиной. Самый большой песчаный остров в мире - Фрейзер, длина только одной песчаной дюны на нем 120 км. Самый глубокий в мире подводный каньон находится к югу от города Эсперанс, Западная Австралия. Его длина около 40 км., ширина 32 км., а глубина около 1800 м. Древнейшим из точно датированных является метеорит Мерчисон, шт. Виктория. Он может быть даже древнее самой Солнечной системы. Самая крутая железная дорога в мире - Катумба-Синик в Голубых горах шт. Новый Южный Уэльс, её уклон равен 1:0,82. Поездка на этом фуникулере занимает 1 мин. 40 с., каждый год он перевозит 420 тыс. пассажиров.
Валюта
Австралийский доллар (AUD), 1 доллар равен 100 центам. Банкноты");"

т.е. тут "ddrivetip(" две двойных кавычки (оно выдаёт и "Синтаксическая ошибка " ) ,если как надо делаешь "ddrivetip(' то выдаёт "Незавершённая строковая константа"
Неизвестный
17.02.2009, 17:03
общий
У меня там в очередной раз съелись кавычки: после ddrivetip(" вместо двойных кавычек везде используйте "
А когда заменяете внутри двойную кавычку на апостроф, Вы в конце ее тоже меняете? Попробуйте использовать функцию nl2br(), которая в строке поменяет переводы строк на
Неизвестный
17.02.2009, 17:22
общий
Всё равно пишет "Незавершённая строковая константа" .
Вот код:

$line['str']= nl2br ($line['str']);

$fm='

<DIV class=img-iluss

onmouseover="ddrivetip("'.$line['str'].'");" onmouseout="hideddrivetip();" align=center>
<A target=_blank><IMG onmouseup="className=\''.$clicked.'\'" class=thumb src=Forum//Person_part'.$line["foto_m_pre"].' vspace=5 border=0 style="border-color:#FFFFFF;"></A></DIV>';


"... заменяете внутри двойную кавычку на апостроф ...." ,я не понял ,что имеется ввиду.
Неизвестный
17.02.2009, 17:29
общий
Ни тот код привёл вот:
$fm='

<DIV class=img-iluss

onmouseover="ddrivetip("'.$line['str'].'");" onmouseout="hideddrivetip();" align=center>
<A target=_blank><IMG onmouseup="className=\''.$clicked.'\'" class=thumb src=Forum//Person_part'.$line["foto_m_pre"].' vspace=5 border=0 style="border-color:#FFFFFF;"></A></DIV>';
Неизвестный
17.02.2009, 17:31
общий
тут в тексте quot; заменяется на кавычки но я сделал как выговорили. всё тоже.
Неизвестный
17.02.2009, 17:31
общий
Экранирование почему-то все равно осталось...
А ошибку JS пишет в каком конкретно месте (проверьте строку и номер символа), чтобы не гадать на ровном месте? Попробуйте в крайнем случае убрать пока из кода вызов функции ddrivetip(), дабы проверить сперва все остальное.
PS. А чтобы не заменялось на кавычку тут, используйте &quot; :)
Неизвестный
17.02.2009, 19:51
общий
$sp="</br>"
$_POST['txtfoto'] = preg_replace("/\\\+|\n+|\t+|\r+/",$sp,$_POST['txtfoto']);
Это надо было сделать - я наверное где то ошибся когда проверял на эти символы.
Иван Сергеевич,в любом случае спасибо за участие ,кстати nl2br (string string) - эта функция наверное заменяет не все последовательности т.к. при печати строка всё равно разрывалась -даже после использования этой функции.
Форма ответа