PHP:Unicode强调char和变音符号

4wk*_*wk_ 9 php unicode encoding tinymce

在我们的网站上,一些Mac用户在将PDF文件中的文本复制粘贴到TextArea(由TinyMCE处理)时会遇到麻烦.所有突出显示的字符都已损坏,并成为例如e?a é,i?for a î等.我无法使用Windows计算机重现此问题.

当我在一个文件上写入TextArea的内容时(在将其插入数据库之前),我发现初始文件e?在视觉上与传统文件不同é(在Vim上,见下文).

问题的视觉示例

确实 :

// the corrupted é - first line of the screenshot
echo bin2hex($char); // display 65cc81

// traditionnal é
echo bin2hex('e?');   // display c3a9
Run Code Online (Sandbox Code Playgroud)

经过大量搜索后,我在这里:似乎Mac OS将Unicode强调的字符复制为两个字符的组合:在我们的示例中,e + ?.到目前为止,我没有找到任何解决方案来替换损坏é的真实的,以避免e?在数据库中.

而且我有点绝望.

dec*_*eze 8

表示规范化为一种形式或另一种形式的过程称为标准化.在PHP中有Normalizer,通过它发送所有输入是一个好主意:

$input = Normalizer::normalize($input);
Run Code Online (Sandbox Code Playgroud)

你可能想要标准化形成C,Canonical Decomposition,然后是Canonical Composition.

如果您的系统上没有该类,那就是Patchwork UTF-8库.