ранслитерация строки для использования в URL
Функция транслитерации текстовой строки для использования в URL с зачисткой от запрещённых символов и переводом в нижний регистр
Function TranslitForURL(val As Variant, Optional sZamena As String = "_") As String ' VBA функция транслитерации текстовой строки для использования в URL ' с зачисткой от запрещённых символов и переводом в нижний регистр '-------------------------------------------------------------------- ' Возвращает модифицированную строку ' Аргументы: ' val = входящая строка (значение поля) ' sZamena = Символ замены для пробелов и проч. (по умолчанию = "_") '-------------------------------------------------------------------- ' Считается, что в URL адресе, допустимы_только латинские буквы, арабские цифры _ ' и ограниченный набор знаков (-_.), а прочие знаки (!@#$&~%*()[]{}'\:;><`,)- недопустимы. ' Коды символов можно найти например тут: ' http://autoit-script.ru/autoit3_docs/appendix/ascii.htm '-------------------------------------------------------------------- Dim strRussian As String Dim arrTranslit As Variant Dim iPos As Integer Dim sTemp As String Dim sResult As String Dim str As String
On Error GoTo TranslitForURL_Err str = CStr(val)
For iPos = 1 To Len(str) sTemp = LCase(Mid(str, iPos, 1)) Select Case Asc(sTemp) Case 32 sResult = sResult & sTemp Case 45 If sZamena = "-" Then sResult = sResult & sTemp Else sResult = sResult & " " End If Case 48 To 57 sResult = sResult & sTemp Case 65 To 90, 97 To 122, 192 To 255 sResult = sResult & sTemp Case 95 sResult = sResult & " " End Select Next str = Trim(sResult) Do While InStr(1, str, Space(2), 1) <> 0 str = Replace(str, Space(2), Space(1), vbTextCompare) Loop strRussian = "абвгдеёжзийклмнопрстуфхцчшщъыьэюя " "l", "m", "n", "o", "p", "r", "s", "t", "u", "f", "h", "c", "ch", _ "sh", "zch", "", "i", "", "eh", "ju", "ja", sZamena) arrTranslit = Array("", "a", "b", "v", "g", "d", "e", "e", "zh", "z", "i", "i", "k", _ "l", "m", "n", "o", "p", "r", "s", "t", "u", "f", "kh", "tc", "ch", _ "sh", "shch", "ie", "y", "", "e", "iu", "ia", sZamena) For iPos = 1 To 34 str = Replace(str, Mid(strRussian, iPos, 1), arrTranslit(iPos), , , vbTextCompare)
Next TranslitForURL = str
TranslitForURL_Bye: Exit Function
TranslitForURL_Err: TranslitForURL = "! Err in string: " & str ' MsgBox "Ошибка " & Err.Number & vbCrLf & Err.Description & vbCrLf & _ "в процедуре: TranslitForURL", vbCritical, "Error!" Resume TranslitForURL_Bye End Function
Пример использования функции TranslitForURL:
Private Sub test_TranslitForURL() 'Пример эксплуотации функции TranslitForURL '-------------------------------------------------------------------- Dim s1 As String Dim s2 As String Dim s3 As String 'Проверять функцию транслитирования лучше на длинной и сложной строке:
s1 = "Считается, что в URL адресе, допустимы только " s2 = "латинские буквы, арабские цифры и ограниченный набор знаков (-_.), " s3 = "а прочие знаки (!@#$&~%*()[]{}'\;><`:,)- недопустимы." s1 = TranslitForURL(s1, "-") 'Вариаант с заменой "грязи" на "-" (дефис) s2 = TranslitForURL(s2, "-") s3 = TranslitForURL(s3, "_") 'Вариаант с заменой на ""_"" (нижнее подчёркивание):"
Debug.Print s1 Debug.Print s2 Debug.Print s3 End Sub
Пример эксплуотации в Immediate Window (Ctrl+G) напишет:
schitaetsia-chto-v-url-adrese-dopustimy-tolko latinskie-bukvy-arabskie-tcifry-i-ogranichennyi-nabor-znakov-- a_prochie_znaki_nedopustimy
|