1

Тема: AHK: Конвертация текста

Какой командой можно конвертировать текст из первого во второй?

<a i=0>por</a> <a i=1>Thierry Meyssan
%3Ca%20i%3D0%3Epor%20%3C%2Fa%3E%3Ca%20i%3D1%3EThierry%20Meyssan

2

Re: AHK: Конвертация текста

Вроде специальной команды нет. Можно тут сконвертировать.

+ DD

3

Re: AHK: Конвертация текста

Ищите UriEncode().

+ DD

4

Re: AHK: Конвертация текста

Malcev
Спасибо. Знал, что у teadrinker`a в скрипте это использовалось, но забыл название). По какой причине скрипт кодирует не полностью — пропускает угловые скобки?

str =
(
<a i=0>por</a> <a i=1>Thierry Meyssan
)
MsgBox % UriEncode(str)

;-------------------------------------------------
; HTML encode/decode
;------------------------------------------------

UriEncode(str)
{ ; v 0.3 / (w) 24.06.2008 by derRaphael / zLib-Style release
   b_Format := A_FormatInteger
   data := ""
   SetFormat,Integer,H
   Loop,Parse,str
      if ((Asc(A_LoopField)>0x7f) || (Asc(A_LoopField)<0x30) || (asc(A_LoopField)=0x3d))
         data .= "%" . ((StrLen(c:=SubStr(ASC(A_LoopField),3))<2) ? "0" . c : c)
      Else
         data .= A_LoopField
   SetFormat,Integer,%b_format%
   return data
}

UriDecode(str)
{ ; v 0.1 / (w) 28.06.2008 by derRaphael / zLib-Style release
   Loop,Parse,str,`%
      txt := (A_Index=1) ? A_LoopField : txt chr("0x" substr(A_LoopField,1,2)) SubStr(A_LoopField,3)
   return txt
}

UnSlashUnicode(s)
{
  ; unslash unicode sequences like \u0026
  ; by Mikhail Kuropyatnikov 2009 (micdelt@mail.ru)
   rx = \\u([0-9a-fA-F]{4})
   pos = 0

   loop
   {
   pos := RegExMatch(s,rx,m,pos+1)
   if (pos = 0)
      break
   StringReplace, s, s, %m%, % Chr("0x" . SubStr(m,3,4))
   }
   
   return s
}

5

Re: AHK: Конвертация текста

ypppu
Действительно, это не команда).

6

Re: AHK: Конвертация текста

Можно так ещё:

str =
(
<a i=0>por</a> <a i=1>Thierry Meyssan
)
MsgBox % UriEncode(str)

URIEncode(str) {
   static flags := ( URL_ESCAPE_PERCENT      := 0x01000 )
                 | ( URL_ESCAPE_SEGMENT_ONLY := 0x02000 )
                 | ( URL_ESCAPE_AS_UTF8      := 0x40000 )
   size := StrLen(str)*2
   Loop 2
      VarSetCapacity(buff, (size + 1) << !!A_IsUnicode)
   until DllCall("Shlwapi\UrlEscape", "Str", str, "Str", buff, "UIntP", size, "UInt", flags) = 0
   Return StrReplace(buff, "+", "%2B")
}

Если каки-то символы не будет кодировать, можно ещё StrReplace добавить.

Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Telegram jollycoder

7

Re: AHK: Конвертация текста

Или так:

str =
(
<a i=0>por</a> <a i=1>Thierry Meyssan
)
MsgBox, % EncodeDecodeURI(str)

EncodeDecodeURI(str, encode := true, component := true) {
   for k, v in [["\", "\\"], ["'", "\'"], ["`r", "\r"], ["`n", "\n"]]
      str := StrReplace(str, v[1], v[2])
   Return GetJS().( (encode ? "en" : "de") . "codeURI" . (component ? "Component" : "") . "('" . str . "')" )
}

GetJS() {
   static doc := ComObjCreate("htmlfile")
        , _ := doc.write("<meta http-equiv=""X-UA-Compatible"" content=""IE=9"">")
        , JS := ObjBindMethod(doc.parentWindow, "eval")
   Return JS
}
Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Telegram jollycoder
+ DD