文章关键字 ‘VBS’

用VBS实现PHP的urlencode函数

2010年06月13日,星期日

昨天是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]

用VBS实现凯撒密码算法

2010年06月5日,星期六

在密码学中,恺撒密码(或称恺撒加密、恺撒变换)是一种最简单且最广为人知的加密技术。它是一种替换加密的技术,明文中的所有字母都在字母表上向後(或向前)按照一个固定数目进行偏移後被替换成密文。例如,当偏移量是3的时候,所有的字母A将被替换成D,B变成E,以此类推。这个加密方法是以恺撒的名字命名的,当年恺撒曾用此方法与其将军们进行联系。

例如,当偏移量是左移3的时候(解密时的密钥就是3):

明文字母表:ABCDEFGHIJKLMNOPQRSTUVWXYZ
密文字母表:DEFGHIJKLMNOPQRSTUVWXYZABC

以上都是废话啦,最近在教一个小朋友VBS,给她出了一道题,让她实现凯撒密码算法,不过貌似有点难了。Google了一下凯撒密码,出来的基本都是C和Java的实现,还是我自己写吧。

Function Caesar(str,offset)
	Dim length,char,i
	Caesar = ""
	length = Len(str)
	For i = 1 To length
		char = Mid(str,i,1)
		If char >= "A" And char <= "Z" Then
			char = Asc("A") + (Asc(char) - Asc("A") + offset) Mod 26
			Caesar = Caesar & Chr(char)
		ElseIf char >= "a" And char <= "z" Then
			char = Asc("a") + (Asc(char) - Asc("a") + offset) Mod 26
			Caesar = Caesar & Chr(char)
		Else
			Caesar = Caesar & char
		End If
	Next
End Function

WScript.Echo Caesar("ABCDEFGHIJKLMNOPQRSTUVWXYZ",3)

WordPress的默认主题真不好使,代码竟然溢出了,将就着看吧,或者给我推荐一个好看点的主题也行。

桌面上出现无法删除图标的解决方法

2010年05月11日,星期二

碰到不少同学的电脑出现这个问题,桌面上出现无法删除的图标(大部分是IE图标),所以写一下

Google一些这个问题,看到的回答基本上都是中了恶意插件,电脑有木马,建议用360修复一下之类的

不由得感叹一下360的营销做得实在是太好了,还有不明真相的群众实在是太多了

寒假的时候帮邻居重装系统,那位只会用电脑上网的阿姨问我:“装哪种杀毒软件好啊?我听说360杀毒永久免费呢”

360果然强大!

这些图标只不过是某些流氓网站或软件为了增加点击量而创建的指向网站首页的快捷方式罢了,通过注册表很容易实现

我电脑上没有360,不知道360是否真的能解决这个问题,如果可以解决,下面的内容就不用看了

如果你电脑上没有360或者360没有解决这个问题再或者你想知道手动解决的方法,请继续往下看
(更多…)