mysql_real_escape_string и html-сущности

Тема в разделе "PHP", создана пользователем LEXAlForpostl, 17 июл 2012.

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

    LEXAlForpostl

    Регистр.:
    21 май 2008
    Сообщения:
    739
    Симпатии:
    226
    Здравствуйте.
    При работе с базами данным всегда экранирую добавляемые строки функцией mysql_real_escape_string. Однако, для того, чтобы в Wordpress'e была возможность разделения краткой и полной новости, необходимо добавить тег "<!--more-->". Проблема в том, что тег этот представляется в виде:
    Естественно, cms этого не понимает и отображает строку <!--more-->.
    Однако же, когда добавляешь вручную разрыв новости на краткую и полную, то в БД добавляется именно строка <!--more--> в "чистом" виде.
    Без mysql_real_escape_string, естественно, MySQL ругается и не позволяет добавить новость.
    Как же добавить в бд текст, в середине которого есть строка <!--more-->, которую нельзя изменять?
     
    Iwashka нравится это.
  2. DrakonHaSh

    DrakonHaSh

    Регистр.:
    29 июн 2010
    Сообщения:
    358
    Симпатии:
    122
    самый простой и действенный (но дурацкий с т.з. правильного программирования) способ - выполнять такой запрос :)
    UPDATE table SET field = REPLACE(field, '&lt;--!more--&gt;', '<!--more-->')
     
    Iwashka нравится это.
  3. o_nix

    o_nix

    Регистр.:
    7 ноя 2007
    Сообщения:
    1.073
    Симпатии:
    1.037
    что мешает взять phpmyadmin и посмотреть в каком виде <!--more--> сохраняется в базе mysql ???

    или бекап mysql базы в notepad++ открыть и посмотреть

    там то уж наверняка будет видно что и как.

    Естественно надо будет создать тестовый пост разбитый тегом перед тем как в sql лезть
     
    Iwashka нравится это.
  4. LEXAlForpostl

    LEXAlForpostl

    Регистр.:
    21 май 2008
    Сообщения:
    739
    Симпатии:
    226
    Я ведь написал выше, что в БД хранится в виде: <!--more-->
    А у меня получается:
     
    Iwashka нравится это.
  5. o_nix

    o_nix

    Регистр.:
    7 ноя 2007
    Сообщения:
    1.073
    Симпатии:
    1.037
    если в дампе sql оно хранится в виде <!--more--> то значит оно именно в таком виде туда и отправляется, и никаких других вариантов быть не может
    в дампе точно экранирования никакого нет ??

    тогда просто и тупо перед тем как делать mysql_real_escape_string делиш текст по признаку <!--more--> каждой из частей делаешь mysql_real_escape_string
    потом объединяешь результаты добавляя между ними разделитель <!--more-->

    explode
    implode

    или что проще после обработки всех данных целиком mysql_real_escape_string
    делать замену в стринге через str_ireplace
    строки &lt;--!more--&gt;
    на <!--more-->
     
    Iwashka нравится это.
  6. vhome

    vhome Создатель

    Регистр.:
    6 авг 2012
    Сообщения:
    37
    Симпатии:
    35
    Проблема не в real_escape_string а в том что перед сохранением гдето используется htmlspecialchars или подобное и результат экранируется
    Вместо того чтобы обрабатываться перед выводом на экран
     
    Iwashka нравится это.
  7. dev99

    dev99 Постоялец

    Регистр.:
    2 июл 2007
    Сообщения:
    82
    Симпатии:
    57
    Да и пофиг как там мускуль сохраняет строку - перед выводом декодируй html-сущности обратно в символы (htmlspecialchars_decode)!
     
    Iwashka нравится это.
  8. blare

    blare Писатель

    Регистр.:
    6 сен 2012
    Сообщения:
    6
    Симпатии:
    1
    Не стоит так делать, лучше найти где символы изначально икранируются, и там это убрать.

    А вообще, лучше перед выводом заменять &lt;--!more--&gt; на то, что нужно, либо <!--more-->

    А скажите, LEXAlForpostl, у вас форматирование текста вообще работает?
     
    Iwashka нравится это.
Статус темы:
Закрыта.