字符编码:将文件从MacRoman更改为UTF-8会中断字符串

ign*_*low 2 php encoding utf-8

我正在使用以MacRoman char编码保存的CakePHP网站.我想将所有文件更改为UTF-8以进行国际化.对于网站中的所有其他文件,这工作正常.但是,在core.php文件中有一个安全盐,它是一个带有特殊字符的字符串("!:*etc.).当我将这个文件保存为UTF-8时,盐被破坏.我可以用git,但这是一个烦恼.

有谁知道如何将字符串从MacRoman转换为UTF-8?

Art*_*cto 5

你没有提供足够的信息来证实这一点,但我想盐是以二进制形式使用的.在这种情况下,如果更改此二进制流,更改文件的编码将损坏salt,即使字符已正确转换.

由于前128个字符在UTF-8和Mac OS Roman中相似,因此您不必担心盐是否仅使用这些字符编写.

让我们说盐在某处:

$salt = "a!c‡Œ";
Run Code Online (Sandbox Code Playgroud)

你可以写:

$salt = "a!c\xE0\xCE";
Run Code Online (Sandbox Code Playgroud)

您可以将所有映射到十六进制表示,因为它可能更容易自动化:

$salt = "\x61\x21\x63\xE0\xCE";
Run Code Online (Sandbox Code Playgroud)

这里的表格.

以下代码段可以自动执行此转换:

$res = "";
foreach (str_split($salt) as $c) {
    $res .= "\\x".dechex(ord($c));
}
echo $res;
Run Code Online (Sandbox Code Playgroud)