За последние 24 часа нас посетили 18099 программистов и 1603 робота. Сейчас ищут 1723 программиста ...

Конец строки: обработка, хранение, проблемы

Тема в разделе "MySQL", создана пользователем jam, 1 фев 2016.

  1. jam

    jam Новичок

    С нами с:
    1 фев 2016
    Сообщения:
    1
    Симпатии:
    0
    Добрый день! Заголовок темы довольно расплывчатый, наверное, так что сразу конкретизирую вопрос.
    Вобщем в форме имеется textarea, куда юзер может вводить краткие комментарии и отправлять их, ничего сложного. Так получилось, что все комментарии, касающиеся одного объекта, я решил хранить в одном поле в БД в сериализованном виде. В данном случае не нужно рассматривать вопрос с целесообразности моего решения такого способа хранения, мне было нужно быстро реализовать, и это первое, что пришло в голову, кроме того суть вопроса не привязана к решению. В итоге я стокнулся с проблемой: если введенное сообщение содержит перенос строки, то браузер отправляет его как CRLF последовательность (браузер Chrome, Win 7), эта последовательность сериализуется в php и кидается в БД в неизменном виде; если я в phpmyadmin захожу в режим редактирования этого поля, затем выхожу из этого режима без фактического изменения, то в итоге поле все равно меняется, и это приводит к невозможности десериализации значения поля. Докопал вобщем до того, что при попытке изменения поля в phpmyadmin происходит вызов jquery.val() значения поля, в результате чего из него удаляются все CR символы, а длина сообщения при этом остается такой же, что и приводит к ошибке десериализации. Из документации jquery (http://api.jquery.com/val/):
    Из различной инфы в интернете почерпнул, что на разных ОС и браузерах конец строки может представляться разными вариантами: CR - MacOS, LF - Unix, CRLF - Windows. Пока что проблему решил конвертацией всех типов конца строки к Unix-type: jquery теперь проблем не вызывает, nl2br() все также прекрасно работает. Но само собой возникает вопрос о возможности унифицированной кросс-браузерной и кросс-платформенной поддержки: для вывода в html у меня есть nl2br(), но а если мне понадобится передавать текст для других целей, где будет иметь значение формат конца строки? Например, если кто-то на Mac получит этот текст с LF, то ему придется делать обработку для корректного форматирования. Самое странное, что я практически не нашел никакой инфы о том, кто как обрабатывает эти "потные" концы строк, не говоря уже о какой-то универсальной концепции. Вобщем буду благодарен, если кто-то поделится опытом или прольет свет на данный вопрос.
     
  2. denis01

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

    С нами с:
    9 дек 2014
    Сообщения:
    12.227
    Симпатии:
    1.714
    Адрес:
    Молдова, г.Кишинёв
    лучше json

    результат будет нормальный
    Код (PHP):
    1. {"test":"test\ntest\n\ntest"}