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


Автор: grusha 19.4.2007, 03:07
подскажите пожалуйста , как победить такую беду...
есть такой кусок кода..

Код

<?php
$new_box ="<table><tr><td>Test</td></tr></table>";
?>
<script language="javascript">
var htmlContentOfNewBox = '<?php echo $new_box;?><DIV>This is a static box.</div>';
</script>


Если написано так , тогда всё ОК , но если так ->

Код

<?php
$new_box ="<table>\r";
$new_box. ="<tr>\r";
$new_box. ="<td>Test</td>\r";
$new_box. ="</tr>\r";
$new_box. ="</table>\r";
?>
<script language="javascript">
var htmlContentOfNewBox = '<?php echo $new_box;?><DIV>This is a static box.</div>';
</script>

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

Заранее спасибо.

Автор: Mymik 19.4.2007, 09:06
grusha, я че-то не понял  smile  В теме ты говоришь, что тебе нужно. В заголовке ты говоришь, что тебе нужно избавиться от пробелов. А тут ты говоришь что тебе они нужны... я чего-то не понял...
вообще, \r это возврат каретки в начало строки. Но для того чтобы перенести каретку на следующую строку, тебе еще нужно написать \n А не работает скорее всего имеено из-за того что происходит возврат каретки и старые данные либо затираются, либо превращаются в мусор.
Но это тебе не в JS тему... А в PHP наверное...
Или у тебя JS код не работает ??? или ... или вообще что у тебя там не работает ??? опиши проблему.

Автор: 12345c 19.4.2007, 15:55
Код

$new_box ="<table>\\\r";
$new_box. ="<tr>\\\r";
$new_box. ="<td>Test</td>\\\r";
$new_box. ="</tr>\\\r";
$new_box. ="</table>\\\r";
(экранируем переносы строк для JS через "\\" в ПХП)

Автор: grusha 19.4.2007, 18:45
Цитата(12345c @ 19.4.2007,  15:55)
Код

$new_box ="<table>\\\r";
$new_box. ="<tr>\\\r";
$new_box. ="<td>Test</td>\\\r";
$new_box. ="</tr>\\\r";
$new_box. ="</table>\\\r";
(экранируем переносы строк для JS через "\\" в ПХП)

мне надо именно средствами javascript.

может я как то не так описал проблему ...
Вообщем мне нужен код который бы удалял переносы, и делал всё в одну строчку.

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

Код

<script language="javascript">
var htmlContentOfNewBox = '<table><tr><td>Test</td></tr></table><DIV>This is a static box.</div>';
</script>


Эсли так то всё ОК, но если так 

Код

<script language="javascript">
var htmlContentOfNewBox = '<table>
<tr>
<td>Test</td>
</tr>
</table><DIV>This is a static box.</div>';
</script>


то перестаёт работать.

Автор: z-END 19.4.2007, 18:59
насколько я понял проблема в генерации переменной для яваскрипт.. скорее всего браузер ругается на unterminated string.
наверно должно помочь:
Код

<?php echo str_replace("\r\n",' ',$new_box);?>

Автор: grusha 19.4.2007, 19:44
Цитата(z-END @ 19.4.2007,  18:59)
насколько я понял проблема в генерации переменной для яваскрипт.. скорее всего браузер ругается на unterminated string.
наверно должно помочь:
Код

<?php echo str_replace("\r\n",' ',$new_box);?>

Спасибо,но так всетаки не работает.
Уточнение...

в переменную $new_box передаётся разный код , и без \r\n, а просто написан скажем вот так ,

Код

<table>
<tr>
<td>Test</td>
</tr>
</table>


вобщем делаю просмотр исходного кода в браузере пишет вот такое 
Код

var htmlContentOfNewBox = '    
        <table class="contentpaneopen">
                <tr>
            <td valign="top" colspan="2">
                Yesterday all servers in the U.S. went out on strike in a bid to get more RAM and better CPUs. A spokes person said that the need for better RAM was due to some fool increasing the front-side bus speed. In future, busses will be told to slow down in residential motherboards.            </td>
        </tr>
                </table>

        <span class="article_seperator">&nbsp;</span>

        <DIV>This is a static box.</div>';


Ну не так не победить этот код ....

Вообще есть ли способ ?

Автор: grusha 19.4.2007, 21:38
Или может ктото скажет почему нельзя писать так ..

Код

<script language="javascript">
var htmlContentOfNewBox = '<table>
<tr>
<td>Test</td>
</tr>
</table><DIV>This is a static box.</div>';
</script>

Автор: Sardar 19.4.2007, 21:49
Цитата(grusha @  19.4.2007,  20:38 Найти цитируемый пост)
Или может ктото скажет почему нельзя писать так

Просто так решили нетскейповцы/ECMA'вцы, строки не могут содержать не экранированных переносов. Либо экранируй через \ (тогда перенос вообще исчезнет), либо кодируй их посредством \n.

Автор: grusha 19.4.2007, 22:13
Цитата(Sardar @  19.4.2007,  21:49 Найти цитируемый пост)
Либо экранируй через \ (тогда перенос вообще исчезнет)


А можнопоподробнее об этом , или примерчик небольшой ?

Автор: Sardar 19.4.2007, 22:28
$new_box = str_replace(array("\n", "\r", "\r\n"), "\\\n", $new_box);
Но учти что все переносы строк просто будут просто игнорироваться при исполнении JS. Замени на '\\n' если они нужны.

Автор: grusha 20.4.2007, 00:39
Этот код проходит если в конце строки стоит \n и т.д. , а если просто код написан , скажем , так
<table>
<tr>
<td>Test</td>
</tr>
</table>
То уже не работает :(
В этом то и проблема ! 

Автор: Sardar 20.4.2007, 01:16
Не может быть такого smile
Пых-пышный исходник сохраняет переносы строк, так что сама строка будет содержать \r\n. Далее str_replace заменяем их на экранированные \n, должно в JS'е быть:

Код

var a = "<table>\
<tr>\
<td>Test</td>\
</tr>\
</table>";

Тогда проблем не будет.

Автор: grusha 20.4.2007, 02:46
Всем большое спасибо , я идиот smile
Посмотрел функцию , а она оказывется инклюдит файл , поэтому и не получалось ничего.

Вообщем спасибо то что вы посоветовали подойдёт , но не для моего случая, для моего кажется ничего не пожет , только изминения самих файлов !

Огромное спасибо всем !

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