Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2010.02.07;
Скачать: CL | DM;

Вниз

Спецсимволы HTML   Найти похожие ветки 

 
Tatarin   (2009-03-12 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("&curren;" ,    "¤");
 REP("&brvbar;" ,    "¦");
 REP("&sect;"   ,    "§");
 REP("©"   ,    "©");
 REP("&ordf;"   ,    "&#170;");
 REP("&laquo;"  ,    "«");
 REP("&raquo;"  ,    "»");
 REP("&reg;"    ,    "®");
 REP("&deg;"    ,    "°");
 REP("&plusmn;" ,    "±");
 REP("&micro;"  ,    "µ");
 REP("&para;"   ,    "¶");
 REP("&middot;" ,    "·");
 REP("&sup1;"   ,    "&#185;");
 REP("&euro;"   ,    "€");
 REP("&trade;"  ,    "™");
 REP("&dagger;" ,    "†");

 Result:= str;
end;


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

ps. сайт не мой, почему так - не знаю.


 
Tatarin   (2009-03-12 23:49) [1]

Форум скушал мои символы. На том сайте символ " представлен в виде & # 39 ; без пробелов. При этом, там так может быть представлен практически любой символ. Встречал даже букву "Ж" в такой кодировке.


 
sniknik ©   (2009-03-13 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 + "&amp#"+i+" - &#"+i+" <br/>"
   }
   var i = "Ж".charCodeAt(0);
   st = st + "&amp#"+i+" - &#"+i+" <br/>"
   document.getElementById("chars").innerHTML = st;
 }
 /*]]>*/
 </script>
</head>

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

</html>

кстати учти, что при другой кодовой странице символы будут совсем другие...


 
sniknik ©   (2009-03-13 21:35) [3]

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


 
sniknik ©   (2009-03-13 21:41) [4]

> смотри ка прошло...
хотя и не все :(

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


 
Tatarin   (2009-03-14 02:35) [5]

Спасибо. Примерно такой метод я и сам хотел использовать. Здесь, конечно, более оптимально, чем у меня.

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

Немного поразмыслив, решил, что прежде чем заменять, стоит просто проверить, есть ли комбинация &# в моей строке(они встречаются не так часто). Думаю, это мне поможет, спасибо.


 
sniknik ©   (2009-03-14 04:47) [6]

> Хотя, и здесь я думаю производительность будет не очень высока,
при чем здесь "производительность здесь"? это пример показывающий "сборку" чтобы понять как "разбирать", понять что это всего лишь код символа в текущей для странице кодировке...


 
Плохиш ©   (2009-03-16 13:17) [7]


> Tatarin   (12.03.09 23:47)
>
>

Почему бы не использовать интерфейс IHTMLDocument2
http://www.swissdelphicenter.ch/de/showcode.php?id=2352



Страницы: 1 вся ветка

Текущий архив: 2010.02.07;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.01 c
2-1260564996
DIM
2009-12-11 23:56
2010.02.07
Не понятно откуда берется такое значение переменной


2-1260513762
Б
2009-12-11 09:42
2010.02.07
Array char -> String


2-1259775521
Alik
2009-12-02 20:38
2010.02.07
Утечка памяти


15-1259865018
andrewtitoff
2009-12-03 21:30
2010.02.07
Кодировка HTTP запросов


2-1260504031
KASioZ
2009-12-11 07:00
2010.02.07
TWebBrowser DOM