Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Работа с сетью в Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 13.10.2010, 13:23   #1
AndrzejX
Пользователь
 
Регистрация: 12.11.2008
Сообщений: 55
По умолчанию Получение содержимого тега <title>

ЗДравствуйте, уважаемые!
Итак, написал программу, которая ищет на страницах сайта внутренние ссылки на предмет создания Sitemap. ДЛя дополнительного функционала для страницы получаю содержимое <title></title>. Всё работает:

Код:
Page:=idHTTP1.Get('адрес_страницы']);

function Title(Page: String): String;
var N1, N2: Integer;
  Flags: TReplaceFlags;
begin
N1:=pos('<title>', LowerCase(Page));
N2:=pos('</title>', LowerCase(Page));
Result:=trim(copy(Page, N1+7, N2-N1-7));
end;
Пробую на google. Пример: страница http://www.google.ru/intl/ru/options/ выводит "Продукты Google". В браузере же это значит: "Продукты Google". Читал про кодировки, но не нашёл нужного способа перекодировать. Как быть?

Последний раз редактировалось AndrzejX; 13.10.2010 в 14:48.
AndrzejX вне форума Ответить с цитированием
Старый 13.10.2010, 14:00   #2
Alter
Старожил
 
Аватар для Alter
 
Регистрация: 06.08.2007
Сообщений: 2,183
По умолчанию

Это кодировка UTF-8. Используйте
Код:
function Utf8Decode(const S: UTF8String): WideString;
Вот самописные функции, думаю полезно будет:
Код:
function FindTagTextParam(Txt, Tg1, Tg2: string; var CurPos: Integer;
  IncludeTag: Boolean; StartPozition: Integer): string;
var a, b, L :Integer;
    S :string;
    Buf :string;
    CorA,CorB :Integer; //коррекция копирования
begin // поиск первого включения тегов, с позиции StartPozition
 Result := '';
  if Trim(Txt) = '' then Exit;
 CurPos := StartPozition;
 Buf := AnsiUpperCase(Txt);
 a := PosEx(AnsiUpperCase(Tg1), Buf, StartPozition);
 a := a + Length(Tg1);
 b := PosEx(AnsiUpperCase(Tg2), Buf, a);
 L := b - a;
  // коэффициенты коррекции строки
 CorA := Length(Tg1);
 CorB := Length(Tg2) + Length(Tg1);
  // добавить ячейку
 if IncludeTag then
 begin // вместе с тегами поиска
  S := Copy(Txt, a - CorA, L + CorB);
  If Pos(Tg1, S) = 1 then
   Result := S;
  CurPos := b + Length(Tg2);
 end
  else
 begin // занчение между тегами
  Result := Copy(Txt, a, L);
  CurPos := b + Length(Tg2);
 end;
end;

function FindTagTextParam(Txt, Tg1, Tg2: string;
  IncludeTag: Boolean): string;
const
 StartPos :Integer = 1; //начало поиска тегов
var a, b, L :Integer;
    S :string;
    Buf :string;
    CorA,CorB :Integer; //коррекция копирования
begin // поиск первого включения тегов
  Result := '';
 if Trim(Txt) = '' then Exit;
 Buf := AnsiUpperCase(Txt);
 a := PosEx(AnsiUpperCase(Tg1), Buf, StartPos);
 a := a + Length(Tg1);
 b := PosEx(AnsiUpperCase(Tg2), Buf, a);
 L := b - a;
  // коэффициенты коррекции строки
 CorA := Length(Tg1);
 CorB := Length(Tg2) + Length(Tg1);
  // добавить ячейку
 if IncludeTag then
 begin // вместе с тегами поиска
  S := Copy(Txt, a - CorA, L + CorB);
  If Pos(Tg1, S) = 1 then
   Result := S;
 end
  else
 begin // занчение между тегами
  Result := Copy(Txt, a, L);
 end;
end;
Получит содержимое тега, без самих тегов:
Код:
Result := FindTagTextParam(Txt, '<title>', '</title>', False);

Последний раз редактировалось Alter; 13.10.2010 в 14:08.
Alter вне форума Ответить с цитированием
Старый 13.10.2010, 14:16   #3
AndrzejX
Пользователь
 
Регистрация: 12.11.2008
Сообщений: 55
По умолчанию

Спасибо, сейчас буду пробовать!!!
Да, в случае google (и там, где используется utf8) всё отлично! А на моём собственном сайте получаются пустые строки. Как понять, что используется utf и нужно применять декодирование?
Пока решил использовать такой вариант:
Код:
if ((Result<>'')and(Utf8Decode(Result)<>''))
  then Result:=Utf8Decode(Result);

Последний раз редактировалось AndrzejX; 13.10.2010 в 14:48.
AndrzejX вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
[title]Fort Net![/title] lithwe Общие вопросы Delphi 0 11.04.2010 02:00
Парсинг тега div motorway PHP 5 10.03.2010 02:22
Замена содержимого тега tr motorway JavaScript, Ajax 1 30.09.2009 18:17
Текст после тега <li> Antoha HTML и CSS 2 07.08.2009 13:16
Вытащить строку <title> .... </title> в txt файл kzld HTML и CSS 7 01.07.2009 11:35