|
|
Транслитерация строки для использования в URL
Функция транслитерации текстовой строки для использования в URL с зачисткой от запрещённых символов и переводом в нижний регистр
Function TranslitForURL(val As Variant, Optional sZamena As String = "_") As String
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 = "абвгдеёжзийклмнопрстуфхцчшщъыьэюя "
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
|
|