Конференция "Основная" » Спецсимволы HTML [D7, WinXP]
 
  • Tatarin (12.03.09 23:47) [0]
    Здравствуйте. Возникла такая задача, с сайта скачивается страница, затем из нее вырезаются некоторые данные. Все это проходит на ура, но. Среди текста встречаются специальные символы, вроде & чтобы их заменить написал такую простую функцию


    function HTMLtoANSI(str: string): string;

     procedure REP(old, new: string);
     begin
       str:= StringReplace(str, old, new, [rfReplaceAll, rfIgnoreCase]);
     end;

    begin
     REP('&'    ,    '&');
     REP('"'   ,    '\"');
     REP('<'     ,    '<');
     REP('>'     ,    '>');
     REP('¤' ,    '¤');
     REP('¦' ,    '¦');
     REP('§'   ,    '§');
     REP('©'   ,    '©');
     REP('ª'   ,    'ª');
     REP('«'  ,    '«');
     REP('»'  ,    '»');
     REP('®'    ,    '®');
     REP('°'    ,    '°');
     REP('±' ,    '±');
     REP('µ'  ,    'µ');
     REP('¶'   ,    '¶');
     REP('·' ,    '·');
     REP('¹'   ,    '¹');
     REP('€'   ,    '?');
     REP('™'  ,    '™');
     REP('†' ,    '†');

     Result:= str;
    end;



    Не гениальна, но с задачей пока справляется. Но кроме них с тексте редко, но все же выскакивают символы вроде '. Писать подобное моей функции для них будет совсем убогим занятием, подскажите, как выйти из ситуации.

    ps. сайт не мой, почему так - не знаю.
  • Tatarin (12.03.09 23:49) [1]
    Форум скушал мои символы. На том сайте символ ' представлен в виде & # 39 ; без пробелов. При этом, там так может быть представлен практически любой символ. Встречал даже букву "Ж" в такой кодировке.
  • sniknik © (13.03.09 21:31) [2]
    > Встречал даже букву "Ж" в такой кодировке.
    насколько позволяют скудные знания по html и яваскрипту (читал книжку недавно), получаются они так  
    (если форум прпустит...)
    <?xml version="1.0" encoding="cp1251"?>

    <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">

    <head>
     <title>chars</title>
     <meta http-equiv="content-type" content="text/html; charset=cp1251" />

     <script language="JavaScript" type="text/javascript">
     /*<![CDATA[*/
     function load() {
       var st = '';
       for(var i=0; i<=255; i++){ //старые привычки, хотя для юникода неактуально
         st = st + '&#'+i+' - &#'+i+' <br/>'
       }

       var i = 'Ж'.charCodeAt(0);
       st = st + '&#'+i+' - &#'+i+' <br/>'
       document.getElementById('chars').innerHTML = st;
     }
     /*]]>*/
     </script>
    </head>

    <body onload="load()">
     <div id="chars"></div>
    </body>

    </html>


    кстати учти, что при другой кодовой странице символы будут совсем другие...
  • sniknik © (13.03.09 21:35) [3]
    смотри ка прошло...
    скопируй в текстовый документ переименуй документ в *.html ... думаю понятно. поймешь принцип формирования, поймешь и как разбирать...
  • sniknik © (13.03.09 21:41) [4]
    > смотри ка прошло...
    хотя и не все :(

    вот эти строчки
    st = st + '&#'+i+' - &#'+i+' <br/>'

     
    нужно так (убери пробелы)
    st = st + '& a m p # '+i+' - & #'+i+' <br/>'  

  • Tatarin (14.03.09 02:35) [5]
    Спасибо. Примерно такой метод я и сам хотел использовать. Здесь, конечно, более оптимально, чем у меня.

    Хотя, и здесь я думаю производительность будет не очень высока, ведь я могу обрабатывать только "строчки", которых на каждой странице около 2 тысяч.

    Немного поразмыслив, решил, что прежде чем заменять, стоит просто проверить, есть ли комбинация &# в моей строке(они встречаются не так часто). Думаю, это мне поможет, спасибо.
  • sniknik © (14.03.09 04:47) [6]
    > Хотя, и здесь я думаю производительность будет не очень высока,
    при чем здесь "производительность здесь"? это пример показывающий "сборку" чтобы понять как "разбирать", понять что это всего лишь код символа в текущей для странице кодировке...
  • Плохиш © (16.03.09 13:17) [7]

    > Tatarin   (12.03.09 23:47)
    >
    >

    Почему бы не использовать интерфейс IHTMLDocument2
    http://www.swissdelphicenter.ch/de/showcode.php?id=2352
 
Конференция "Основная" » Спецсимволы HTML [D7, WinXP]
Есть новые Нет новых   [118667   +42][b:0][p:0.002]