Чем эскейпить/анэскейпить HTML?
От: Константин Л. Франция  
Дата: 31.07.06 17:40
Оценка:
VC 7.1, юзается ATL/WTL/boost. Смотрел atlenc.h, там нет.
Re: Чем эскейпить/анэскейпить HTML?
От: Константин Л. Франция  
Дата: 31.07.06 17:41
Оценка:
Здравствуйте, Константин Л., Вы писали:

КЛ>VC 7.1, юзается ATL/WTL/boost. Смотрел atlenc.h, там нет.

хотя можно и самому написать, тк список символов для эскейпа невелик: <,>,",',&
Re: Чем эскейпить/анэскейпить HTML?
От: _Storm  
Дата: 01.08.06 09:16
Оценка:
Здравствуйте, Константин Л., Вы писали:

КЛ>VC 7.1, юзается ATL/WTL/boost. Смотрел atlenc.h, там нет.


ATL: EscapeToCString, AtlEscapeUrl / AtlUnescapeUrl, EscapeXML ?
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Re[2]: Чем эскейпить/анэскейпить HTML?
От: Константин Л. Франция  
Дата: 01.08.06 09:23
Оценка:
Здравствуйте, _Storm, Вы писали:

_S>Здравствуйте, Константин Л., Вы писали:


КЛ>>VC 7.1, юзается ATL/WTL/boost. Смотрел atlenc.h, там нет.


_S>ATL: EscapeToCString,


не знаю что это

_S> AtlEscapeUrl / AtlUnescapeUrl,


эскейпинг для URL отличается от эскейпинга для HTML

_S>EscapeXML ?


да, только в XML "'" эскейпится в "&apos;", а в HTML в "& #39";
Re: Чем эскейпить/анэскейпить HTML?
От: zaufi Земля  
Дата: 01.08.06 10:02
Оценка:
Здравствуйте, Константин Л., Вы писали:

КЛ>VC 7.1, юзается ATL/WTL/boost. Смотрел atlenc.h, там нет.


недавна тоже занимался данной темой (юзается только буст). Было сделано такое решение:

Rationale
Сделать unescape (и в будущем escape) строк со следующими свойствами:
т.е. фактически чтобы (un)escaperы были продолжением бустовых стринговых алгоритмов...

Impl
Для начала надо отделить посик того что можно/нужно (un)escapить от собственно (un)escape'а.

Для этого были сделаны finderы возвращающие iterator_range в оригинальной строке которые можно использовать совместно с make_find_iterator из буста.

Далее остается применять (un)escapящие функторы к найденым местам в строке...

в двух словах вот такая идея...
Re[2]: Чем эскейпить/анэскейпить HTML?
От: Константин Л. Франция  
Дата: 01.08.06 10:35
Оценка:
Здравствуйте, zaufi, Вы писали:

[]

Все далее мое имхо:

Если цель программы эскейпить кучу всего в разных варияциях, то твоя идея, наверное, хороша. Но вот для того, чтобы в 2х местах анэскейпнуть HTML писать целый framework... Не стоит.

Я прост онаписал простейшую функцию, без притязательств на кроссплатформенность и т.п.:


      void UnescapeHTML( ATL::CString& value )
      {
        value.Replace( _T("&amp;"), _T("&"));
        value.Replace( _T("&lt;"),  _T("<"));
        value.Replace( _T("&gt;"),  _T(">"));        
        value.Replace( _T("&quot;"),_T("\""));
        value.Replace( _T("& #39;"), _T("'"));//тут конечно, код ' без пробела
      }
Re: Чем эскейпить/анэскейпить HTML?
От: FreshMeat Россия http://www.rsdn.org
Дата: 01.08.06 10:36
Оценка:
Здравствуйте, Константин Л., Вы писали:

КЛ>VC 7.1, юзается ATL/WTL/boost. Смотрел atlenc.h, там нет.

Если я правильно понимаю, что значит эскейпить/анэскейпить, то работы на несколько минут
[выдрано из текущего проекта]
txt 2 html
#include <boost/algorithm/string.hpp>
std::wstring filter( const std::wstring& str )
{
    using namespace boost;

    std::wstring text = str;
    // todo сделать нормальную табуляцию

    // http://html.maxhost.ru/specialchars.html
    // при отображении "съедаются" спецсимволы, поэтому после "&" добавлены пробелы
    replace_all( text, L"&", L"& #38;" ); 
    replace_all( text, L"\t", L"& #160;& #160;" );
    replace_all( text, L"<", L"& #60;" );
    replace_all( text, L">", L"& #62;" );
    replace_all( text, L"\"", L"& #34;" );
    replace_all( text, L"\n", L"<br>" );
    return text;
} // std::wstring filter( const std::wstring& qstr ) const

И наоборот.
ПС. Насчет производительности не напрагялся
Хорошо там, где мы есть! :)
Re[3]: Чем эскейпить/анэскейпить HTML?
От: zaufi Земля  
Дата: 01.08.06 12:13
Оценка:
Здравствуйте, Константин Л., Вы писали:

КЛ>Если цель программы эскейпить кучу всего в разных варияциях, то твоя идея, наверное, хороша.


так и есть -- с успехом применяется... и количество unescapящих функторов становится все больше

КЛ>Но вот для того, чтобы в 2х местах анэскейпнуть HTML писать целый framework... Не стоит.


ну я бы тоже не стал елиб это был юнит-тест или демка/прототип какойнить... но в составе проекта я бы всетки это сделал (даже еслиб мне требовалось unescapнуть 2 раза) -- ибо как показывает мой лична опыт луче потратить немного времени и сделать жинериковый и реюзабельный код чем городить постоянно наколеночные варианты одного и тогоже... более того как только ты его сделаешь прочие применения сами собой найдуца -- кроме того никто ведь не заставляет плодить все возможные unescapящие функторы прям щаз... достаточно сделать ровно то что тебе нужно в данный момент, все что понадобится потом буит сделано потом
Re[3]: Чем эскейпить/анэскейпить HTML?
От: WinterMute Россия http://yarrr.ru
Дата: 01.08.06 12:49
Оценка:
Здравствуйте, Константин Л., Вы писали:

_S>>EscapeXML ?


КЛ>да, только в XML "'" эскейпится в "&apos;", а в HTML в "& #39";


Это не так, оба варианта корректны и в HTML и в XML.
Re[2]: Чем эскейпить/анэскейпить HTML?
От: WinterMute Россия http://yarrr.ru
Дата: 01.08.06 12:51
Оценка:
Здравствуйте, FreshMeat, Вы писали:

FM>Здравствуйте, Константин Л., Вы писали:


КЛ>>VC 7.1, юзается ATL/WTL/boost. Смотрел atlenc.h, там нет.

FM>Если я правильно понимаю, что значит эскейпить/анэскейпить, то работы на несколько минут
FM>[выдрано из текущего проекта]
FM>txt 2 html
FM>
FM>#include <boost/algorithm/string.hpp>
FM>std::wstring filter( const std::wstring& str )
FM>{
FM>    using namespace boost;

FM>    std::wstring text = str;
FM>    // todo сделать нормальную табуляцию

FM>    // http://html.maxhost.ru/specialchars.html
FM>    // при отображении "съедаются" спецсимволы, поэтому после "&" добавлены пробелы
FM>    replace_all( text, L"&", L"& #38;" ); 
FM>    replace_all( text, L"\t", L"& #160;& #160;" );
FM>    replace_all( text, L"<", L"& #60;" );
FM>    replace_all( text, L">", L"& #62;" );
FM>    replace_all( text, L"\"", L"& #34;" );
FM>    replace_all( text, L"\n", L"<br>" );
FM>    return text;
FM>} // std::wstring filter( const std::wstring& qstr ) const
FM>

FM>И наоборот.
FM>ПС. Насчет производительности не напрагялся

В общем случае это не будет правильно работать, ключевые слова: CDATA-секции, комментарии, numeric-entities.
Re: Чем эскейпить/анэскейпить HTML?
От: c-smile Канада http://terrainformatica.com
Дата: 01.08.06 22:14
Оценка:
Здравствуйте, Константин Л., Вы писали:

КЛ>VC 7.1, юзается ATL/WTL/boost. Смотрел atlenc.h, там нет.


Посмотри вот две мои статьи:
http://www.codeproject.com/cpp/utf8ostream.asp
http://www.codeproject.com/cpp/HTML_XML_Scanner.asp
Re[3]: Чем эскейпить/анэскейпить HTML?
От: c-smile Канада http://terrainformatica.com
Дата: 01.08.06 22:22
Оценка:
Здравствуйте, WinterMute, Вы писали:


FM>> using namespace boost;


FM>>ПС. Насчет производительности не напрагялся


WM>В общем случае это не будет правильно работать, ключевые слова: CDATA-секции, комментарии, numeric-entities.


А ну и шо? Зато быстро
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.