如何在php中将非ASCII转换为数字?

如何在php中将非ASCII转换为数字?,php,character-encoding,ascii,Php,Character Encoding,Ascii,我刚开始用php编写代码,我有一个任务要做。 我必须从文件中读取非ascii字符,如“字符”,将其转换为字符串数组,将其转换为整数,并向其添加数字 例如,如果我有'''字符,我应该得到147,然后如果我加上-31,它应该返回字符't' 这是我试过的一个代码 $file = fopen("word.txt", "r") or die("File missing"); $wholefile=fread($file, file

我刚开始用php编写代码,我有一个任务要做。 我必须从文件中读取非ascii字符,如“字符”,将其转换为字符串数组,将其转换为整数,并向其添加数字

例如,如果我有'''字符,我应该得到147,然后如果我加上-31,它应该返回字符't'

这是我试过的一个代码

    $file = fopen("word.txt", "r") or die("File missing");
    $wholefile=fread($file, filesize("word.txt"));
    fclose($file);
    
    $words =explode(chr(0x0A), $wholefile);

      $file = fopen("password.txt", "r") or die("File missing");
    $wholefile=fread($file, filesize("password.txt"));
    fclose($file);
    
    $words =explode(chr(0x0A), $wholefile);

    //An exmaple
    $str = $words[0];
    for($i = 0; $i< strlen($str); $i++)
    {
        $str[$i] = chr(ord($str[$i]) - 31);
    }
    echo "$str";

顺便说一句,
仍然是ASCII。它只是一个标点符号。@deceze,当将字节流解释为Windows 1250/1252时,代码点147和148对应于一些系统/字体解释为
”的“智能引号”,这就是我认为OP的目的。对于OP,您需要确定是处于“传统模式”还是现代模式。如果您是前者,您将生活在代码页的世界中,这是一场噩梦,最安全的事情是基于特定的数据集构建一个静态查找表。如果你身处现代世界,一切都是UTF-8,你所做的一切都毫无意义。为什么要减去
31
?这些字是“解码密码”,编码功能是从密码字符中减去整数。结果将始终是ASCII字符。ord()函数在这里不起作用。我得到的不是147而是226。(我想,问题是字符编码,因为它在我类似的C项目中引起了很多问题。)我需要一些函数/方法/算法,返回正确的字符值。你知道你在第二个块中覆盖了
$words
,对吗?也许那只是一个复制粘贴的东西。我对你正在尝试的东西有一个模糊的概念。我建议使用
unpack
等函数将字符串作为字节数组获取并打印出来进行调试<代码>变量导出(解包('C*','hello world')经过一些调试,我意识到,大于128的字符被转换成三个数字,如(226 128 156)。所以226128156代表“字符”。你能帮我得到这个字符的扩展ASCII码吗?
Can you help me to get ascii characters isntead of ��-s?

The content of the file (exmaple)
pS“`nf2†ddn^MZrrŠ