За последние 24 часа нас посетили 16813 программистов и 1644 робота. Сейчас ищут 1203 программиста ...

лишние переносы строк (unix?)

Тема в разделе "Вопросы от блондинок", создана пользователем Punk T-34, 1 апр 2011.

  1. Punk T-34

    Punk T-34 Активный пользователь

    С нами с:
    6 янв 2011
    Сообщения:
    20
    Симпатии:
    0
    Адрес:
    Украина
    Добрый день.
    Есть flash-сайт с панелью администрирования на php.
    Когда в админ панели я ввожу текст, он записывается в MySQL базу. На сервере, также, есть php-файл, который при обращении к нему генерирует xml с данными из MySQL. Этот xml читается флеш-сайтом.

    Проблема с отступами в тексте, которые генерируются сами по себе. От них я хочу избавиться.
    Вот пример текста в админке:

    [​IMG]

    В нём после первого предложения идёт перенос на следующую строку.
    А после второго предложения — перенос на две строки вниз.
    И вот что видит флеш-сайт:

    [​IMG]

    Как видите, там, где есть переносы на строку вниз добавилось по одному отступу.
    -------------
    При этом, если я в админке пишу текст в таком стиле:

    [​IMG]

    то форматирование работает нормально.
    Я предполагаю, что эти дополнительные отступы от того, что во флеше включено HTML-форматирование (есть такая необходимость).

    В ходе работы я случайно наткнулся на такой нюанс:
    если на сервере, есть два xml-файла (не те которые генерируются php, а именно файлы): один в UNIX кодировке, а другой — в DOS\Windows, то в первом случае флеш с включённым HTML форматированием читает текст нормально (без дополнительных отступов), а во втором — с отступами.

    У меня хостинг на Linux сервере. И я не понимаю, почему сгенерированный сервером XML ведёт себя так как будто бы это файл с DOS\Windows кодировкой?

    И основной вопрос: как избавиться от лишних переносов строк, сохранив HTML-форматирование для Flash?
     
  2. Elkaz

    Elkaz Старожил
    Команда форума Модератор

    С нами с:
    26 июн 2006
    Сообщения:
    3.373
    Симпатии:
    0
    Адрес:
    Баку, Азербайджан
  3. Punk T-34

    Punk T-34 Активный пользователь

    С нами с:
    6 янв 2011
    Сообщения:
    20
    Симпатии:
    0
    Адрес:
    Украина
    спасибо! кажется я понял, что нужно делать.
     
  4. Punk T-34

    Punk T-34 Активный пользователь

    С нами с:
    6 янв 2011
    Сообщения:
    20
    Симпатии:
    0
    Адрес:
    Украина
    <br /> вставил легко, но переносы строк убрать не получается:

    PHP:
    1. <?php
    2.  
    3. $text = 'Восприятие сотворчества дает миракль, изменяя привычную реальность.
    4. Александрийская школа заполняет художественный талант, ломая рамки привычных представлений.
    5.  
    6. Роль наблюдаема. Акцентуация, в том числе, релевантно подрывает фактографический аутотренинг, как и предсказывают практические аспекты использования принципов гештальпсихологии в области восприятия, обучения, развития психики, социальных взаимоотношений.';
    7. echo str_replace("", "\n", nl2br($text));
    8.  
    9. ?>
    Что здесь неправильно?
     
  5. tommyangelo

    tommyangelo Старожил

    С нами с:
    6 дек 2009
    Сообщения:
    2.549
    Симпатии:
    0
    Адрес:
    Мариуполь
    echo nl2br($text);


    не?
     
  6. Elkaz

    Elkaz Старожил
    Команда форума Модератор

    С нами с:
    26 июн 2006
    Сообщения:
    3.373
    Симпатии:
    0
    Адрес:
    Баку, Азербайджан
    PHP:
    1.  
    2. <?php
    3. header ('Content-type: text/html; charset=utf-8');
    4. $text = 'Восприятие сотворчества дает миракль, изменяя привычную реальность.
    5. Александрийская школа заполняет художественный талант, ломая рамки привычных представлений.
    6.  
    7. Роль наблюдаема. Акцентуация, в том числе, релевантно подрывает фактографический аутотренинг, как и предсказывают практические аспекты использования принципов гештальпсихологии в области восприятия, обучения, развития психики, социальных взаимоотношений.';
    8. $text = str_replace("<br />", "", nl2br($text));
    9.  
    10. ?>
    11. <textarea rows="25" cols="100"><?php echo $text; ?></textarea>
    12.  
     
  7. Punk T-34

    Punk T-34 Активный пользователь

    С нами с:
    6 янв 2011
    Сообщения:
    20
    Симпатии:
    0
    Адрес:
    Украина
    нет, такой вариант не работает: http://darts-design.com/test.php
    Тут, если посмотреть исходный код страницы, то мы видим переносы, но нигде нету тегов br.
    А при использовании одной только команды nl2br() теги br добавляются в конец строки, однако они не заменяют собой переносы: http://darts-design.com/test2.php
     
  8. Punk T-34

    Punk T-34 Активный пользователь

    С нами с:
    6 янв 2011
    Сообщения:
    20
    Симпатии:
    0
    Адрес:
    Украина
    Проблема решена:
    PHP:
    1. $text = str_replace("\r\n", "", nl2br($text));
    Я о таком нюансе с \r\n не знал и пробовал подставлять только \n.
     
  9. antonn

    antonn Активный пользователь

    С нами с:
    10 июн 2007
    Сообщения:
    2.996
    Симпатии:
    0
    \r\n это виндовый перенос, \n юниксвый, \r маковский. грубо говоря :)
     
  10. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    вот ведь отстой! я думал бывает либо рн либо н.
     
  11. Punk T-34

    Punk T-34 Активный пользователь

    С нами с:
    6 янв 2011
    Сообщения:
    20
    Симпатии:
    0
    Адрес:
    Украина
    а в каких случаях их нужно использовать или не использовать? От чего это зависит?
    А то я-то решение нашёл, но почему именно так понять не могу.
     
  12. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    по всему выходит что нужно сначала проверить есть ли пары \n\r, если есть - убрать все р и заменять по н, если нету - проверить есть ли \r, заменять по \r, иначе - заменять по \n

    :D
     
  13. titch

    titch Активный пользователь

    С нами с:
    18 дек 2010
    Сообщения:
    847
    Симпатии:
    0
    не....
    preg_replace(/\r\n/Ui.....
    preg_replace(/[\r\n]/Ui.....
    и всё. работает очень быстро. быстрее, чем одной регуляркой
     
  14. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    точно!
     
  15. Punk T-34

    Punk T-34 Активный пользователь

    С нами с:
    6 янв 2011
    Сообщения:
    20
    Симпатии:
    0
    Адрес:
    Украина
    Мне тут подсказали, что str_replace работает на много быстрее чем preg_replace. Особенно, если дело касается большого количества текста.
     
  16. YSandro

    YSandro Старожил

    С нами с:
    7 апр 2011
    Сообщения:
    2.523
    Симпатии:
    2
    Правильно.
    Код (Text):
    1. $out=str_replace(array("\r\n","\n\r","\r"),"\n",$out);
    Код (Text):
    1. $out=str_replace(array("\r\n","\n\r","\r"),'<br>',$out);//флэшу нужен <br>
     
  17. titch

    titch Активный пользователь

    С нами с:
    18 дек 2010
    Сообщения:
    847
    Симпатии:
    0
    прикольно) я массивами никогда не юзал. надо взять на заметку
    зы: конструкция \n\r неверна. так писать нельзя
    с вашего позволения поправлю:
    PHP:
    1. <?php
    2. $out=str_replace(array("\r\n","\n","\r"),'<br>',$out); //флэшу нужен <br>
    3. ?>
     
  18. YSandro

    YSandro Старожил

    С нами с:
    7 апр 2011
    Сообщения:
    2.523
    Симпатии:
    2
    Почему же нельзя? В Маке так. Ну по крайней мере так было раньше. У них либо \r, либо \n\r. Так что ничего страшного не произойдет, если лишний раз удостоверимся.
     
  19. titch

    titch Активный пользователь

    С нами с:
    18 дек 2010
    Сообщения:
    847
    Симпатии:
    0
    в маке \r:

     
  20. YSandro

    YSandro Старожил

    С нами с:
    7 апр 2011
    Сообщения:
    2.523
    Симпатии:
    2
    Ну вы не волновайтесь. Это скорее пример.
    Код (Text):
    1. $out=str_replace(array("\r\n","\n\r","\r","\n"),'<br>',$out);
    Я вообще такими делами занимался
    Код (Text):
    1. $page->html=str_ireplace(
    2.   array(
    3.     'href="/?p='.$tid.'"',
    4.     "href='/?p=".$tid."'",
    5.     'href="?p='.$tid.'"',
    6.     "href='?p=".$tid."'",
    7.     'href="p='.$tid.'"',
    8.     "href='p=".$tid."'",
    9.     'href="['.$tid.']"',
    10.     "href='[".$tid."]'",
    11.     'href="{'.$tid.'}"',
    12.     "href='{".$tid."}'"
    13.   ),
    14.   'href="'.$prefix.$path.'"',$page->html
    15. );
    и мне до сих пор не стыдно :)
     
  21. MiksIr

    MiksIr Активный пользователь

    С нами с:
    29 ноя 2006
    Сообщения:
    2.339
    Симпатии:
    44
    Быстрее, но не настолько, что вы ощутите хоть какую-то разницу. Зависит, конечно, еще и от самой регулярки. А, например, если вам понадобится не только заменить переводы на <BR> но и схлопнуть несколько подряд идущих - регулярка будет удобнее и быстрее.
     
  22. Punk T-34

    Punk T-34 Активный пользователь

    С нами с:
    6 янв 2011
    Сообщения:
    20
    Симпатии:
    0
    Адрес:
    Украина
    Да, я знаю преимущества preg_replace. Но на флеш-сайте обычно никаких действий с текстом делать не нужно (тем более на стороне сервера).
    Всем спасибо, очень помогли!