Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > PHP: Общие вопросы > Строку склеенную в PHP не хочет жевать Javascript


Автор: =Женек= 15.10.2007, 15:40
В PHP есть такой код

Код

 $string.= "<TABLE width=100% border=1 rules=none>
                 <TR><TD colspan=2 align=center>Äîáàâèòü êîììåíòàðèé <HR></TD></TR>
                 <FORM method=post action=index.php?news={$id}>
                 <INPUT type=hidden name=addcomment value=1>
                 <TR><TD align=right>Èìÿ: </TD><TD align=left><INPUT type=text name=sender size=30 maxlength=30></TD></TR>
                 <TR><TD align=right>E-mail: </TD><TD align=left><INPUT type=text name=sender_email size=30 maxlength=30></TD></TR>
                 <TR><TD align=right>Êîììåíòàðèé: </TD><TD align=left><TEXTAREA type=text name=comment ROWS=5 COLS=30></TEXTAREA></TD></TR>
                 <TR><TD colspan=2 align=center><INPUT type=SUBMIT VALUE=Îòïðàâèòü><INPUT type=reset VALUE=Î÷èñòèòü></TD></TR>
                </FORM>

              </TABLE><br>";

print "

<HTML>
<BODY>
asdsad
<script>
  parent.document.all.comment_{$id}.innerHTML='{$string}';
</SCRIPT>
</BODY>
</HTML>
";




Склеивается строка $string, которая потом передается в свойство innerHTML элемента <TD comment_x>

Как видите в HTML разметке есть переходы на новую строку. Javascript генерирует ошибку. Если выстроить всю HTML разметку в единую строку все ОК, но неудобно для дальнейшего редактирования. Как орбработать $string, чтобы javascript его скушал?

Автор: skyboy 15.10.2007, 15:59
Цитата(=Женек= @  15.10.2007,  14:40 Найти цитируемый пост)
 Как орбработать $string, чтобы javascript его скушал?

удалить переносы строк после формирования.
Код

$string= str_ireplace("\n","",$string);

или при передаче.
Код

" parent.document.all.comment_{$id}.innerHTML='".str_ireplace("\n","",$string)."';"

Автор: =Женек= 15.10.2007, 16:17
Ну а все же, чтобы готовый код был человеческим с переносами?
Неужели innerHTML не может передать символ перевода каретки?

Кстати, почему-то $string= str_ireplace("\n","",$string); не убирает перевод каретки...

Автор: skyboy 15.10.2007, 17:05
потому, что, видимо, твои Enter'ы редактор сохраняет как "\n\r" или "\r\n". в таком случае сначала надо "обнулить" "\n", а потом дополнительно - "\r".
Цитата(=Женек= @  15.10.2007,  15:17 Найти цитируемый пост)
Ну а все же, чтобы готовый код был человеческим с переносами?

готовый код - с переносами. без переносов только значение стрковой константы в javascript. Или ты хочешь, чтоб после применения javascript измененный HTML-код был с переносами? тогда в РНР меняй "\n" на "'+'\n' + '". Т.е. на код, который превратится в перенос строки уже под JavaScript, а не при формировании.

Автор: =Женек= 15.10.2007, 17:25
В принципе первый вариант работает. ОДнако попытался добиться красивого готового HTML кода.


Сделал так:

Код

$string= str_replace("\r","",$string);
$string= str_replace("\n", "'+'\n' + '" ,$string);


Получилось вот что:

Код

 parent.document.all.comment_1.innerHTML='<TABLE width=100% border=1 rules=none>'+'
' + '                 <TR><TD colspan=2 align=center>Добавить комментарий <HR></TD></TR>'+'
' + '                 <FORM method=post action=index.php?news=1>'+'
' + '                 <INPUT type=hidden name=addcomment value=1>'+'
' + '                 <TR><TD align=right>Имя: </TD><TD align=left><INPUT type=text name=sender size=30 maxlength=30></TD></TR>'+'
' + '                 <TR><TD align=right>E-mail: </TD><TD align=left><INPUT type=text name=sender_email size=30 maxlength=30></TD></TR>'+'
' + '                 <TR><TD align=right>Комментарий: </TD><TD align=left><TEXTAREA type=text name=comment ROWS=5 COLS=30></TEXTAREA></TD></TR>'+'
' + '                 <TR><TD colspan=2 align=center><INPUT type=SUBMIT VALUE=Отправить><INPUT type=reset VALUE=Очистить></TD></TR>'+'
' + '                </FORM>'+'


Почему-то \n так и остается в виде символа переноса.

Добавлено через 3 минуты и 59 секунд
Ладно, конечный результат я так понял должен быть таким : "<td>"+"\n"+"</TD>";
Но ведь, насколько я помню, (у меня был большой перерыв в программировании, стал забывать азы, помня при этом тонкости) - можно интегрровать с помощью апострофов и слешей символ перевода в саму строку типа <TD>/\n</TD>

Напомните, пожалуйста и подскажите.

Автор: flashaa 15.10.2007, 19:35
Код

$string= str_replace("\n", "'+'\n' + '" ,$string);


Эта строка не коректна, в итоге ты заменяешь шило на мыло, т.е. символы переноса на символы переноса. Т.к. внешние кавычки - двойные, символы интерпретируются как переносы.
Поменяй на следующее:

Код

$string= str_replace("\n", '\n',$string);

Автор: vasac 15.10.2007, 20:40
+ пропустить через addSlashes, чтобы в строку не затесалась кавычка.
+ почитать основы HTML на тему, как в этом самом HTML переносить строки.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)