mail mail
Нужен макрос для Excel?
Сделайте заказ прямо сейчас!
Ищете готовое решение?
Выбирайте и покупайте!
У вас есть интернет-магазин?
Настроим парсер под любой сайт!

Преобразование строки, содержащей кириллицу, в URLEncode

Пользовательская функция на VBA, которая преобразовывает Unicode (русский текст) в URLencode

Function RussianStringToURLEncode(ByVal txt As String) As String
    For i = 1 To Len(txt)
        l = Mid(txt, i, 1)
        Select Case AscW(l)
            Case Is > 256: t = "%" & Hex(AscW(l) \ 64 + 192) & "%" & Hex(8 * 16 + AscW(l) Mod 64)
            Case 32: t = "+"
            Case Else: t = l
        End Select
        RussianStringToURLEncode = RussianStringToURLEncode & t
    Next
End Function

И что-то типа обратного преобразования - URLdecode:

Function URLencodeToString(ByVal StringToDecode As String) As String
    StringToDecode = Replace(StringToDecode, "%20", "")
    Dim TempAns As String, CurChr As Long
    CurChr = 1
    Do Until CurChr - 1 >= Len(StringToDecode)
        Select Case Mid(StringToDecode, CurChr, 1)
            Case "+"
                TempAns = TempAns & " "
            Case "%"
                v1 = Val("&H" & Mid(StringToDecode, CurChr + 1, 2))
                v2 = Val("&H" & Mid(StringToDecode, CurChr + 4, 2))
                TempAns = TempAns & ChrW((v1 - 194) * 64 + v2)
                CurChr = CurChr + 5
            Case Else
                TempAns = TempAns & Mid(StringToDecode, CurChr, 1)
        End Select
        CurChr = CurChr + 1
    Loop
    URLencodeToString = TempAns
End Function


Еще один вариант функции:
Function RussianStringToURLEncode(ByVal txt As String) As String
    Dim i&, l$, t$
    For i = 1 To Len(txt)
        l = Mid(txt, i, 1)
        Select Case AscW(l)
            Case Is >= 256: t = "%" & Hex(AscW(l) \ 64 + 192) & "%" & Hex(8 * 16 + AscW(l) Mod 64)
            Case Else: t = "%" & Hex(AscW(l) \ 16) & Hex(AscW(l) Mod 16)
        End Select
        RussianStringToURLEncode = RussianStringToURLEncode & t
    Next
End Function


новая версия
Function RussianStringToURLEncode_New(ByVal txt As String) As String
    For i = 1 To Len(txt)
        l = Mid(txt, i, 1)
        Select Case AscW(l)
            Case Is > 4095: t = "%" & Hex(AscW(l) \ 64 \ 64 + 224) & "%" & Hex(AscW(l) \ 64) & "%" & Hex(8 * 16 + AscW(l) Mod 64)
            Case Is > 127: t = "%" & Hex(AscW(l) \ 64 + 192) & "%" & Hex(8 * 16 + AscW(l) Mod 64)
            Case 32: t = "%20"
            Case Else: t = l
        End Select
        RussianStringToURLEncode_New = RussianStringToURLEncode_New & t
    Next
End Function

Комментарии

Настройки просмотра комментариев

Выберите нужный метод показа комментариев и нажмите "Сохранить установки".

С п а с и б о!

Андрей, сделать что?
в какой кодировке у вас текстовая строка изначально? и в какую надо перевести? и зачем вообще это делаете?

Как сделать то же самое, но не для Unicode, а Windows-1251 ?

Спасибо, ребят, что вы существуете! Пошел писать функцию для rskript, за основу возьму ваш труд. =)

два пробела меняются на последовательность %20%20. Какую строку преобразуете и что получается?

Круто! Но есть маленький недочет, если в ссылке стоит 2 пробела подряд, они заменяются на 1 знак %20 и ссылка перестает работать, т.к. правильный вариант, когда 2 пробела заменяются на 2 знака %20%20. Как можно это исправить?

А как в exele это заюзать?

АААААА
СПАСИБО!!!!!!!!!!!!!11
Уже мозг начинал взрываться от поиска именно этого преобразования
Сейчас сижу и улыбаюсь монитору.

Отправить комментарий

Содержание этого поля является приватным и не предназначено к показу.
CAPTCHA
Подтвердите, пожалуйста, что вы - человек:
  _____  __  __  _     ____    _       ____  
|_ _| \ \/ / | |_ | __ ) | |__ | _ \
| | \ / | __| | _ \ | '_ \ | |_) |
| | / \ | |_ | |_) | | |_) | | _ <
|_| /_/\_\ \__| |____/ |_.__/ |_| \_\
Введите код, изображенный в стиле ASCII-арт.

Не получается применить макрос? Не удаётся изменить код под свои нужды?

Оформите заказ у нас на сайте, не забыв прикрепить примеры файлов, и описать, что и как должно работать.