用于从字符串中去除重音的VB函数

时间:2014-07-16 19:01:24

标签: vbscript

我尝试使用一个带字符串的函数,并返回相同的字符串而没有任何带重音的字母。相反,重音字母应该返回没有重音的相同字母。此功能无效:

function StripAccents(str)

accent   = "ÈÉÊËÛÙÏÎÀÂÔÖÇèéêëûùïîàâôöç"
noaccent = "EEEEUUIIAAOOCeeeeuuiiaaooc"

currentChar = ""
result = ""
k = 0
o = 0

FOR k = 1 TO len(str)
    currentChar = mid(str,k, 1)
    o = InStr(accent, currentChar)
    IF o > 0 THEN
        result = result & mid(noaccent,k,1)
    ELSE
        result = result & currentChar
    END IF
NEXT

StripAccents = result

End function

testStr = "Test : à é À É ç"
response.write(StripAccents(testStr))

这是使用上述结果:

Test : E E Eu EE E

3 个答案:

答案 0 :(得分:1)

忽略可能的编码问题 - 您必须更改

result = result & mid(noaccent,k,1)

result = result & mid(noaccent,o,1)

答案 1 :(得分:0)

您应该首先进行分解规范化(NFD)。我想你可以在VBA中使用WinAPI函数NormalizeString(https://msdn.microsoft.com/en-us/library/windows/desktop/dd319093(v=vs.85).aspx)调用。然后,您可以删除重音代码点。

答案 2 :(得分:0)

我尝试了添加了更正的示例代码

Then I added more characters

给予:

accent   = "àèìòùÀÈÌÒÙäëïöüÄËÏÖÜâêîôûÂÊÎÔÛáéíóúÁÉÍÓÚðÐýÝãñõÃÑÕšŠžŽçÇåÅøØ"
noaccent = "aeiouAEIOUaeiouAEIOUaeiouAEIOUaeiouAEIOUdDyYanoANOsSzZcCaAoO"

现在我意识到还有更多要处理的东西,即

æ
Æ
ß

这些需要首先进行转换,方法是将其简单替换为ae AEss

然后,除了在代码中没有<%@LANGUAGE="VBSCRIPT" CODEPAGE="65001"%>或类似内容很重要之外,其他方法都可以正常工作

不过,标头中包含meta charset="UTF-8"并不是什么大问题,它可以很好地转换。

因此,如果页面上需要包含<%@LANGUAGE="VBSCRIPT" CODEPAGE="65001"%>的代码,我对此一无所知

感谢代码更加环保,对于处理常见的变音符号非常有用:-)