用VBS实现PHP的urlencode函数

标签: , , , ,

昨天是JavaScript的,今天换成VBScript版的urlencode函数了,好吧,我承认我很无聊。我写代码之前Google过关键词“VBS urlencode函数”,结果出来的前三个链接(你搜索的结果可能和我不一样)是:。(原谅我不喜欢直接贴链接)好家伙,代码一模一样,一模一样不要紧,还都是错的。贴出来围观一下(注意这是错的)。

Function URLEncode(strURL)
    Dim I
    Dim tempStr
    For I = 1 To Len(strURL)
        If Asc(Mid(strURL, I, 1)) < 0 Then
            tempStr = "%" & Right(CStr(Hex(Asc(Mid(strURL, I, 1)))), 2)
            tempStr = "%" & Left(CStr(Hex(Asc(Mid(strURL, I, 1)))), Len(CStr(Hex(Asc(Mid(strURL, I, 1))))) - 2) & tempStr
            URLEncode = URLEncode & tempStr
        ElseIf (Asc(Mid(strURL, I, 1)) >= 65 And Asc(Mid(strURL, I, 1)) <= 90) Or (Asc(Mid(strURL, I, 1)) >= 97 And Asc(Mid(strURL, I, 1)) <= 122) Or (Asc(Mid(strURL, I, 1)) >= 48 And Asc(Mid(strURL, I, 1)) <= 57) Then
            URLEncode = URLEncode & Mid(strURL, I, 1)
        Else
            URLEncode = URLEncode & "%" & Hex(Asc(Mid(strURL, I, 1)))
        End If
    Next
End Function

连“-_.”这几个符号都一起encode,忽悠广大的人民群众么。退一步讲,假设代码是正确的吧,这代码的效率不敢恭维。我觉得我写代码已经够不讲究效率了,原来还有比我更强的人。每循环一次都要计算一次Len(strURL),然后是出现无数次的Asc(Mid(strURL, I, 1)) 。现在的人到底在想什么,难道看都不看就Ctrl+C,Ctrl+V吗?

由于不同编码的中文字符urlencode的结果是不一样的,我写了两个版本的urlencode函数,一个是ANSI版的,一个是UTF-8版的。这里的ANSI和UTF-8指的不是VBS文件保存的编码,而是指对应的PHP编码,即ANSI版的对应以gb2312编码的PHP字符串的urlencode,UTF-8版的对应以UTF-8编码的PHP字符串的urlencode。以“恶魔”为例,使用ANSI版的urlencode后输出%B6%F1%C4%A7,而UTF-8版的输出%E6%81%B6%E9%AD%94。

代码懒得贴出来了,直接下载吧,有什么问题请留言指正,目前我测试的样本都没有问题,也许是样本不够多吧。

ANSI版的urlencode

[download id=11]

UTF-8版的urlencode

[download id=12]

随机文章:

  1. 在Windows下编译zlib 1.25
  2. VBS统计字符串全部字符出现的次数并排序
  3. Windows下编译cURL
  4. VBS基础教程第四篇
  5. 邪恶的eval和new Function

2 条评论 发表在“用VBS实现PHP的urlencode函数”上

  1. […] 其实这个问题在以前写《VBS实现PHP的urlencode函数》的时候就碰到了,但是当时没有记下来,造成写前面一篇文章《VBS实现Unicode转UTF-8》的时候重蹈覆辙。还是记录下来吧,免得以后又忘记。 MSDN文档对AscW的说明是:AscW是为使用Unicode字符的32位平台提供的。它返回Unicode(宽型)字符代码,因此可以避免从ANSI到Unicode的代码转换。 […]

  2. 忆城说道:

    您好!
    VBS实现PHP的urlencode函数—— UTF-8版 无从下载,能否回复贴上代码……
    或将代码发一份到 huangyangqiu@qq.com,不胜感激!

    因为用 WGestures鼠标手势软件+VBS脚本+Everything 我觉得能实现Win系统全局多重搜索功能
    不懂编程的我就东拼西凑网上的VBS代码想实现自己的想法:

    Win系统全局多重搜索功能
    1、框选任意文本关键词,划特定鼠标手势让WGestures软件开始执行VBS脚本;
    2、VBS复制关键词后读取剪贴板,过滤掉特殊无用符号;
    3、VBS将关键词编辑写入百度、谷歌、微博、知乎等各个搜索引擎的Url,然后跳转;默认用Chrome浏览器,如果安装Evernote插件也可以同时搜索到自己的Evernote全部笔记;
    4、VBS打开网址同时,再调用Everything自动输入关键词搜索本地系统文件资源。

    这样就可以在任意可选文本的位置攫取关键词实现真正意义上的全局多重搜索,但是在上面的第三步中文转UTF-8编码编辑网址被难倒了……

    求大侠帮忙;

留下回复