Перейти к содержанию
Fire Monkey от А до Я
  • 0

Декодирование HTML через THTMLEncoding


Maximus

Вопрос

Добрый день. Возникла проблема при декодировании HTML страницы. При попытке декодировать символ

THTMLEncoding.HTML.Decode(' ');

получаю ошибку

Снимок1.jpg

Не хотелось использовать обычную замену, думал использовать специальную функцию для этого, но не вышло... Это очередной баг или перед декодированием текст ещё как-то нужно подготовить?

Ссылка на комментарий

Рекомендуемые сообщения

  • 0
  • Модераторы

так он и не знает о таком символе

 try
    while Sp^ <> #0 do
    begin
      case Sp^ of
        '&':
          begin
            Cp := Sp;
            Inc(Sp);
            case Sp^ of
              'a':
                if AnsiStrPos(Sp, 'amp;') = Sp then { do not localize }
                begin
                  Inc(Sp, 3);
                  Rp^ := '&';
                end;
              'l', 'g':
                if (AnsiStrPos(Sp, 'lt;') = Sp) or (AnsiStrPos(Sp, 'gt;') = Sp)
                then { do not localize }
                begin
                  Cp := Sp;
                  Inc(Sp, 2);
                  while (Sp^ <> ';') and (Sp^ <> #0) do
                    Inc(Sp);
                  if Cp^ = 'l' then
                    Rp^ := '<'
                  else
                    Rp^ := '>';
                end;
              'q':
                if AnsiStrPos(Sp, 'quot;') = Sp then { do not localize }
                begin
                  Inc(Sp, 4);
                  Rp^ := '"';
                end;
              '#':
                begin
                  Tp := Sp;
                  Inc(Tp);
                  while (Sp^ <> ';') and (Sp^ <> #0) do
                    Inc(Sp);
                  SetString(S, Tp, Sp - Tp);
                  Val(S, I, Code);
                  if I >= $10000 then
                  begin
                    // DoDecode surrogate pair
                    Rp^ := Char(((I - $10000) div $400) + $D800);
                    Inc(Rp);
                    Rp^ := Char(((I - $10000) and $3FF) + $DC00);
                  end
                  else
                    Rp^ := Chr((I));
                end;
            else
              raise EConvertError.CreateFmt(sInvalidHTMLEncodedChar,
                [Cp^ + Sp^, Cp - PChar(Input)])
            end;
          end
      else
        Rp^ := Sp^;
      end;
      Inc(Rp);
      Inc(Sp);
    end;
  except
    on E: EConvertError do
      raise EConvertError.CreateFmt(sInvalidHTMLEncodedChar,
        [Cp^ + Sp^, Cp - PChar(Input)])
  end;
  SetLength(Result, Rp - PChar(Result));

 

Ссылка на комментарий

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить на вопрос...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...