Проблема с удалением переносов строк из MYSQL

Тема в разделе "PHP", создана пользователем askarbin, 21 янв 2010.

Статус темы:
Закрыта.
Модераторы: latteo
  1. askarbin

    askarbin

    Регистр.:
    31 мар 2009
    Сообщения:
    293
    Симпатии:
    36
    Столкнулся с проблемой при работе с api яндекс карт.
    Задача стояла такая, чтобы выводить объект на карту по заданным координатам и к нему прикручивать балун с определенными данными из ячейки БД.
    Так вот при добавлении описания в балун возникла странная проблема.
    Если текст в БД идет без переносов строк, то все выводится отлично.
    Но вот если в нем есть переносы строк, то карта не выводится вообще.
    И речь тут не о тегах <br />, а именно о переносах строк, которые через поле <textarea> попадают в БД.
    Пытался функцией str_replace убирать "\n", не помогает.
    Подскажите, как быть, проблему можно решать на любой стадии.
     
  2. mc-alkin

    mc-alkin

    Регистр.:
    17 июл 2009
    Сообщения:
    164
    Симпатии:
    100
    ты убил \n, а остались \r - убей их тоже.
     
  3. bubchen

    bubchen Создатель

    Регистр.:
    7 окт 2006
    Сообщения:
    13
    Симпатии:
    4
    В Unix каждая строка текстового файла заканчивается символом "перевод строки" \n (код 0x0A). В Windows текстовые строки разделяются парой символов: "возврат каретки" \r (0x0D) и "перевод строки" \n (0x0A).

    То есть в Unix системах на конце используется \n, в windows \r\n.
     
  4. askarbin

    askarbin

    Регистр.:
    31 мар 2009
    Сообщения:
    293
    Симпатии:
    36
    К сожалению, эти способы не принесли желаемого результата.
    Если существует перенос строки, Яндекс карта все равно упорно не показывается. Может быть кто-нибудь посоветует другое решение проблемы?
     
  5. everest

    everest

    Регистр.:
    20 дек 2006
    Сообщения:
    197
    Симпатии:
    20
    кроме \n и \r я еще убивал \t (табуляция) и пробелы в конце и начале строк (ну кроме одного, естественно). По пробелам - бывало, что их встречается по 2 и более...
     
  6. serjinio

    serjinio

    Регистр.:
    10 май 2007
    Сообщения:
    439
    Симпатии:
    49
    В какой кодировке у вас данные?
     
  7. ADyDyka

    ADyDyka Создатель

    Регистр.:
    19 янв 2010
    Сообщения:
    26
    Симпатии:
    5
    Есть два решения, оба должны работать:
    1) str_replace ( "\r\n" , "" , $str)
    Обращаю внимание что "\r\n" - обязательно в двойных кавычках, по другом не сработает.
    2) str_replace ( "
    " , "" , $str)
    Здесь прям в в коде функции в первом аргументе делаем перенос строки нажав на enter :) Ну работает безотказно :) Единственно не помню играют ли роль здесь кавычки двойные или одинарные. Попробуйте если что и так и так.
     
  8. paraped

    paraped Писатель

    Регистр.:
    25 июл 2009
    Сообщения:
    4
    Симпатии:
    0
    ИМХО оба варианта одинаковы, лучше прописывать символы через эскейп-последовательность, насчет кавычек помойму без разницы.
     
  9. krenkus

    krenkus Создатель

    Регистр.:
    10 мар 2008
    Сообщения:
    37
    Симпатии:
    4
    переносы лучше не убивать, а конвертануть в html
    nl2br()
    кроме того, если строка для карты идет в кавычках, то кавычки тоже нельзя там использовать, да и спецсимволы лучше как минимум слешать. Возможно поможет вот что:
    function jsonString( $string )
    {
    static $chars = "\0..\37\\/\"";
    return addcslashes( $string, $chars );
    }
     
Статус темы:
Закрыта.