我只想完成一些我希望将字符串从ansi转换为utf8的内容,反之亦然。
示例:to_ansi(1234) 预期结果:NLKJ
示例:to_utf8(NLKJ) 预期结果:1234
functions I currently have are:
function to_ansi($str)
{
$newString = "";
$reversedString = strrev($str);
for($i=0; $i < strlen($reversedString); $i++ ) {
$newString .= iconv(mb_detect_encoding(), 'UTF-8', chr(ord($reversedString[$i]) * 1.5));
}
return $newString;
}
function to_utf8($str)
{
$newString = "";
$reversedString = strrev($str);
for($i=0; $i < strlen($reversedString); $i++ ) {
$newString .= iconv(mb_detect_encoding(), 'UTF-8', chr(ord($reversedString[$i]) / 1.5));
}
return $newString;
}
使用上面的那些功能
示例:to_ansi(1234) 结果:NLKI
示例:to_utf8(NLKJ) 结果:1224
实际上我只是将vbs解释为PHP而原始函数是:
Function ToAnsi(ByVal strPassword As String) As String
Dim strLetter As String
Dim strRevPass As String
Dim strNewPass As String
strRevPass = strReverse(strPassword)
strNewPass = ""
For a = 1 To Len(strRevPass)
strLetter = Mid$(strRevPass, a, 1)
strNewPass = strNewPass & Chr((Asc(strLetter) * 1.5))
Next a
Text2.Text = strNewPass
End Function
Function ToUTF8(ByVal strPassword As String)
Dim strLetter As String
Dim strRevPass As String
Dim strNewPass As String
strRevPass = strReverse(strPassword)
strNewPass = ""
For a = 1 To Len(strRevPass)
strLetter = Mid$(strRevPass, a, 1)
strNewPass = strNewPass & Chr(Asc(strLetter) / 1.5)
Next a
txtText3.Text = strNewPass
End Function
答案 0 :(得分:0)
为什么你认为ANSI中的1234应该是UTF-8中的NLKJ?
您遇到问题的原因可能是舍入错误。你的乘法和除以1.5。例如,字母&#39; y&#39; (ASCII 122)除以1.5是80 2/3,其被视为81(字符代码中没有分数)。然后回:81 * 1.5 = 121.5,被视为122,产生了&#39; z&#39;
因此很难理解这段代码的含义。它当然不是常规的ANSI到UTF-8转换。
它似乎做了一些密码散列/编码,但是以一种非常不安全的方式。它只是一种非常简单的编码算法,除了它本身就是破坏之外,还可以非常容易地解码,并且会使你的数据无法修复。