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


Автор: hexen 14.10.2007, 13:02
   Уважаемые программисты подскажите пожалуста такую вещь.
Проблема следующая. текст набранный в форме <textarea></textarea> где я ставил пробелы в начале строки и на новых обзацах. 
сохранил его в БД и когда хочу текст вывести как новость на сайте. пробелы в начале строки отсуцтвуют.

     добавил функцию nl2br() помогает но ставит только <br>. 
        А где пробелы делись? 
        Где их взять?
        хотя если этот текст вывести в форме опять то весь текст выглядит как нужно.
что делать направьте, подскажите. Бьюсь второй день.

Автор: SelenIT 14.10.2007, 15:32
Цитата(hexen @  14.10.2007,  13:02 Найти цитируемый пост)
 А где пробелы делись?

Остались в исходном коде HTML, при рендеринге проигнорированы, как всегда...

Цитата(hexen @  14.10.2007,  13:02 Найти цитируемый пост)
что делать

Вариант 1: выводить текст в теге <pre></pre>, без nl2br().

Вариант 2: регулярками заменять подряд идущие пробелы на неразрывные, напр.
Код
preg_replace("/(?<=\s) (?=\s)/s", "&nbsp;", $text);

Вариант 3+: см. первую тему внизу страницы.

Автор: sTa1kEr 14.10.2007, 18:36
Цитата(SelenIT @  14.10.2007,  15:32 Найти цитируемый пост)
Вариант 2: регулярками заменять подряд идущие пробелы на неразрывные, напр.

Я бы рекомендовал заменять не на "&nbsp;", а на "\xA0"

Автор: hexen 14.10.2007, 18:49
Цитата(sTa1kEr @ 14.10.2007,  18:36)
Цитата(SelenIT @  14.10.2007,  15:32 Найти цитируемый пост)
Вариант 2: регулярками заменять подряд идущие пробелы на неразрывные, напр.

Я бы рекомендовал заменять не на "&nbsp;", а на "\xA0"

 Спасибо щас попробую. 

Автор: SelenIT 14.10.2007, 18:55
sTa1kEr, а какие еще плюсы "\xA0", кроме экономии трафика? А вдруг там (маловероятно, конечно, но чем шут не чертит...) окажется KOI-8?

Автор: hexen 14.10.2007, 18:58
Цитата(hexen @ 14.10.2007,  18:49)
Цитата(sTa1kEr @ 14.10.2007,  18:36)
Цитата(SelenIT @  14.10.2007,  15:32 Найти цитируемый пост)
Вариант 2: регулярками заменять подряд идущие пробелы на неразрывные, напр.

Я бы рекомендовал заменять не на "&nbsp;", а на "\xA0"

 Спасибо щас попробую.

вот что выводит на странице вместе с текстом \xA0как\xA0дела\xA0прохо

    Вобще смотрю на форуме винграда сообщения выводятся как мне нужно. А как из обк. формы такое слепить?

Добавлено через 10 минут и 43 секунды
Вобщем парни, спасибо большое за помощь, сделал сам и получил результат, что нужен.

function nls2p($str)
{  
  for ($i = 0;$i < strlen($str); $i++)
  {
    
    if(' ' == $str{$i}){ $strA{$i} .='&nbsp;';}
     else{ $strA{$i} .= $str{$i};}

    
  }
        $str = implode(NULL,$strA);
return  nl2br($str);
        
        
}

<td><?=nls2p(stripslashes($edit->news_text))?></td>

Автор: sTa1kEr 14.10.2007, 19:13
Цитата(SelenIT @  14.10.2007,  18:55 Найти цитируемый пост)
sTa1kEr, а какие еще плюсы "\xA0", кроме экономии трафика?

Не надо декодировать символы. И, имхо, более правильный стиль. Просмотрите как нибудь html код, где в качестве отступов &nbsp; используется... Это же просто издевательство над html.

Цитата(SelenIT @  14.10.2007,  18:55 Найти цитируемый пост)
А вдруг там (маловероятно, конечно, но чем шут не чертит...) окажется KOI-8? 

А вдруг там ASCII-7? Тогда вообще остается либо htmlentities(), либо сразу удавится, что бы не мучатся smile

Автор: hexen 14.10.2007, 19:16
Цитата(sTa1kEr @ 14.10.2007,  19:13)
Цитата(SelenIT @  14.10.2007,  18:55 Найти цитируемый пост)
sTa1kEr, а какие еще плюсы "\xA0", кроме экономии трафика?

Не надо декодировать символы. И, имхо, более правильный стиль. Просмотрите как нибудь html код, где в качестве отступов &nbsp; используется... Это же просто издевательство над html.

Цитата(SelenIT @  14.10.2007,  18:55 Найти цитируемый пост)
А вдруг там (маловероятно, конечно, но чем шут не чертит...) окажется KOI-8? 

А вдруг там ASCII-7? Тогда вообще остается либо htmlentities(), либо сразу удавится, что бы не мучатся smile

  все там будет в норме, так как проверил на вывод,  просто без &nbsp; небыло красной строки 
все по одному уровню. а теперь гуд.
  и никто небудет мучаться асобенно я.
так как сервер мой, страница моя. СПС

Автор: SelenIT 14.10.2007, 19:35
Цитата(sTa1kEr @  14.10.2007,  19:13 Найти цитируемый пост)
html код, где в качестве отступов &nbsp; используется... Это же просто издевательство над html.

Согласен. Вообще, имхо, правильнее всего использовать настоящие абзацы и text-indent... ;)

Цитата(sTa1kEr @  14.10.2007,  19:13 Найти цитируемый пост)
А вдруг там ASCII-7?

Ни разу не видел на сайтах. А KOI-8 видел (правда, это было так давно...). Если сейчас точно нет в ходу кодировок, где 160-й символ занят чем-то "левым" - то у меня вопросов больше нет smile.

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