PHP ansi到utf8,反之亦然

时间:2014-03-26 10:42:39

标签: php utf-8

我只想完成一些我希望将字符串从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

1 个答案:

答案 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转换。

它似乎做了一些密码散列/编码,但是以一种非常不安全的方式。它只是一种非常简单的编码算法,除了它本身就是破坏之外,还可以非常容易地解码,并且会使你的数据无法修复。