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

Форум PHP

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

 

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

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

тема: Как развернуть код в цепочку знаков?
 
 автор: Владимир55   (10.07.2007 в 20:14)   письмо автору
 
 

Сам не вполне понимаю, как изложить проблему, поэтому попробую, как получится.

Суть вот в чем.

Осуществляется вывод информации средствами рнр в новом окне посредством вот такого скрипта (выводится через echo).

<script language="javascript" type="text/javascript">
// функция открытия нового окна
function creawind()
{
var nw;
nw=window.open('','','toolbar=no, scrollbars=no, left=100,top=150 '+',width=200, height=300');
nw.document.write('<h1>Привет, это новое окно</h1>');
}
</script> 


При этом на практике текст вывода я ввожу в виде переменной $text. При этом, если


$text = '<h1>Привет, это новое окно</h1>' ;

то всё прекрасно, а если код html файла, то не работает, и при в диагностическом углу можно прочесть: "Выполнено, но с ошибками". Исследования показали, что причина не в коде как таковом, а в способе его представления!

Например, если написать так:

$text = '<h1>Привет, это 
новое окно</h1>' ;

то тоже не работает! Хотя никаких знаков переноса (перевода строки) в коде нет, но как-то js это чувствует!

Вот что тут можно сделать?

   
 
 автор: sms-send   (10.07.2007 в 20:41)   письмо автору
 
   для: Владимир55   (10.07.2007 в 20:14)
 

> Хотя никаких знаков переноса (перевода строки) в коде нет, но как-то js это чувствует!

Как нет?

$text = '<h1>Привет, это    /*<< вот он перевод строки*/
новое окно</h1>' ;


Все переводы строк нужно заменять на "\n", это ж java.

   
 
 автор: Владимир55   (10.07.2007 в 20:49)   письмо автору
 
   для: sms-send   (10.07.2007 в 20:41)
 

Похоже, что так и есть!

Но что мне заменять на "\n"? Какой код у этого невидимого переноса?

Я прогнал через echo htmlspecialchars($text) и кодов все равно не увидел, хотя переносы строк на экране наблюдаются.

Так какой же код заменять?

====================
А на кодах типа

font face="Arial"><p style="text-indent: 50px"> <p style="text-indent: 50px"><?php include "../verh.php"; ?>

JS не споткнется?

   
 
 автор: sms-send   (10.07.2007 в 21:29)   письмо автору
 
   для: Владимир55   (10.07.2007 в 20:49)
 

>Но что мне заменять на "\n"?

Заменять нужно перевод строки.

У вас:
document.write('первая строка
вторая строка');


Надо:
document.write('первая строка\nвторая строка');


>Какой код у этого невидимого переноса?

Он вполне видимый, ведь текст в редакторе переносится, а не остаётся на той же строке. Номера байтов 13 ("\r") и 10 ("\n").

>Я прогнал через echo htmlspecialchars($text) и кодов все равно не увидел, хотя переносы строк на экране наблюдаются.

htmlspecialchars фильтрует для вывода в html, а не в JavaScript.

>Так какой же код заменять?

<?php
$text
='<html>

<head>
  <title></title>
</head>

<body>
<script language="javascript" type="text/javascript">
document.write(\''
.str_replace(array(chr(10),chr(13)),array('\n','\r'),'<h1>Привет, это
 новое окно</h1>'
).'\');
</script>
</body>

</html>'
;
echo 
$text;
?>


Замену нужно делать именно при выводе строк в JavaScript.

   
 
 автор: Владимир55   (11.07.2007 в 00:08)   письмо автору
 
   для: sms-send   (10.07.2007 в 21:29)
 

Проблема совершенно исчезла!

Я даже попробовал ввести реальный код html файла, и он прекрасно воспроизвелся!

Однако функциональность решения вцелом нарушилась (я её плохо сформулировал). Созданный Вами код выводит информацию непрерывно, я мне надо запускать вывод кликом по ссылке и в новом окне. Примерно вот так:

$buff = "Привет, это
 новое окно" ;

$text= <<< TEXT
<script language="javascript" type="text/javascript">
function creawind()
{
var nw;
nw=window.open('','','toolbar=no, scrollbars=no, left=100,top=150 '+',width=200, height=300');
nw.document.write(\''.str_replace(array(chr(10),chr(13)),array('\n','\r'),$buff ).'\');
}
</script>
TEXT;

echo $text;

$ssylka = '<a href="#" onclick="creawind();">Ссылка</a>' ;
echo $ssylka;


Однако, это не работает!

Пишет, что выполнено, но с ошибками, и ссылка не запускается!

Что то тут еще надо чуть-чуть подкорректировать... Но что?

   
 
 автор: bronenos   (11.07.2007 в 00:20)   письмо автору
 
   для: Владимир55   (11.07.2007 в 00:08)
 

1. <<<TEXT без пробелов
2. вывод кода рассчитан на то что вы будете его в ' брать, так как аргумент функции взят в \'. синтаксическая ошибка выходит

   
 
 автор: Владимир55   (11.07.2007 в 00:49)   письмо автору
 
   для: bronenos   (11.07.2007 в 00:20)
 

Выходит ошибка.

А как-нибудь исправить то её можно?

   
 
 автор: sms-send   (11.07.2007 в 00:53)   письмо автору
 
   для: Владимир55   (11.07.2007 в 00:49)
 

<?php
$buff 
"Привет, это
 новое окно" 
;

$text='<script language="javascript" type="text/javascript">
function creawind()
{
var nw;
nw=window.open("","","toolbar=no, scrollbars=no, left=100,top=150 "+",width=200, height=300");
nw.document.write("'
.str_replace(array(chr(10),chr(13)),array('\n','\r'),$buff ).'");
}
</script>'
// heredoc при вызове функций неуместен, поэтому используем кавычки

echo $text;

$ssylka '<a href="#" onclick="creawind();">Ссылка</a>' ;
echo 
$ssylka;
?>

   
 
 автор: Владимир55   (11.07.2007 в 01:11)   письмо автору
 
   для: sms-send   (11.07.2007 в 00:53)
 

Вот с такой переменной

$buff = "Привет, это
 новое окно" ;

работает отлично!

Но с реальным текстом теперь не хочет... Видимо, замена переносов повредила что-то еще. Пишет: "Выполнено, но с ошибками", и ссылку не открывает. Вот такой реальный файл:


$buff = <<<TEXT

<html><head><meta http-equiv="Content-Language" content="ru">
<meta http-equiv="Content-Type" content="text/html; charset=windows-1251"><title>За неделю рост цен на петербургском рынке недвижимости составил 0,22%</title></head><body bgcolor="#E8E8FF"><table border="0" width="100%" id="table1" style="border-collapse: collapse">
<tr><td><p style="margin-top: 0; margin-bottom: 0">&nbsp;</p>
<p style="margin-top: 0; margin-bottom: 0"><?php  include "../verh.php"?>
</p><p style="margin-top: 0; margin-bottom: 0; text-indent:50px">№ 97</p><p style="margin-top: 0; margin-bottom: 0; text-indent:50px">&nbsp;</p>
<p style="margin-top: 0; margin-bottom: 0; text-indent:50px"><font face="Arial" size="4">За неделю рост цен на петербургском рынке недвижимости составил 0,22%</font></p><p style="margin-top: 0; margin-bottom: 0">&nbsp;</p>
<p style="margin-top: 0; margin-bottom: 0"><font face="Arial"><p style="text-indent: 50px">
Средняя цена предложения на вторичном рынке за истекшую неделю (с 4 по 11 июня) выросла на 0,22% и составила 69 861 руб. за кв. м. Чуть более значительный рост за тот же период времени показала средняя цена предложения квадратного метра в строящихся домах. Стоимость «квадрата» в новых домах выросла на 2, 44% и достигла 62 364 руб.
Отрицательную динамику продемонстрировали цены на комнаты - зафиксировано снижение их стоимости на 0,21%. Таким образом, средняя цена комнаты в Петербурге сейчас составляет 1 млн 246 тыс. руб. за кв.м.
</font></p><p style="margin-top: 0; margin-bottom: 0">&nbsp;</p>
<p style="margin-top: 0; margin-bottom: 0; text-indent:50px"><font face="Arial">Дата публикации: 8 June 2007 года, 19 часов 00 минут</font></p><p style="margin-top: 0; margin-bottom: 0; text-indent:50px"><font face="Arial">Источник: http://www.bpn.ru</font><p style="margin-top: 0; margin-bottom: 0">&nbsp;<p style="margin-top: 0; margin-bottom: 0">&nbsp;<p style="margin-top: 0; margin-bottom: 0" align="center">
<font face="Arial"><a href="98.htm">Новость позднее этой</a>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<a href="96.htm">Новость ранее этой</a></font><p style="margin-top: 0; margin-bottom: 0" align="center">&nbsp;<p style="margin-top: 0; margin-bottom: 0" align="left">&nbsp;<?php  include "../niz.php"?></td></tr></table></body></html>

TEXT;

   
 
 автор: Unkind   (11.07.2007 в 04:21)   письмо автору
 
   для: Владимир55   (11.07.2007 в 01:11)
 

Какая-то чушь...Зачем Вы взяли код в heredoc?

   
 
 автор: Владимир55   (11.07.2007 в 09:39)   письмо автору
 
   для: Unkind   (11.07.2007 в 04:21)
 

Занес код в одинарные кавычки, но ровным счетом ничего не изменилось: "Выполнено, но с ошибками". И ссылка не открывается.

Похоже, что дело совсем не в этом!

   
 
 автор: Unkind   (11.07.2007 в 09:52)   письмо автору
 
   для: Владимир55   (11.07.2007 в 09:39)
 

Вы пихаете PHP-код (include'ы) в переменную $buff.
Вы ожидаете, что он выполнится?

   
 
 автор: Владимир55   (11.07.2007 в 10:05)   письмо автору
 
   для: Unkind   (11.07.2007 в 09:52)
 

Я ожидаю, что воспроизведется записанный в $buff ttml файл, в коде которого имеется и include, и при воспроизведении файла include исполнится.

Собственно, так оно и было с кодом sms-send (10.07.2007 в 21:29) (на этой странице). Единственный недостаток того кода - он не понимает переноса строк. А после исправления переноса строк перестал читаться код вцелом.

Вот такая проблема!

   
 
 автор: Unkind   (11.07.2007 в 10:14)   письмо автору
 
   для: Владимир55   (11.07.2007 в 10:05)
 

Воспроизведением HTML-файла занимается браузер.
include - конструкция PHP. Этим должен заниматься сервер.
Но Вы пихаете это в переменную.
К счастью, просто так интерпретатор не будет рассматривать значение переменной как PHP-код.

   
 
 автор: Владимир55   (11.07.2007 в 11:45)   письмо автору
 
   для: Unkind   (11.07.2007 в 10:14)
 

Для чистоты эксперимента я убрал из кода обе конструкции <?php include "../niz.php"; ?> И ничего не изменилось: пишет что выполнено, но с ошибками, и не обрабатывает ссылку.

В чем же теперь причина?

   
 
 автор: Владимир55   (11.07.2007 в 11:59)   письмо автору
 
   для: Владимир55   (11.07.2007 в 11:45)
 

Спасибо, справился! Все прекрасно выводит, и include в том числе. Просто надо было почистить код от ПС отдельным оператором, и уж потом направлять в JS.

   
Rambler's Top100
вверх

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