编码问题导致在同一位置创建了 2 个同名文件夹

Encoding issues lead to 2 folders created with same name in the same location

我认为编码问题导致在同一位置创建相同的文件夹。

第一个文件夹是使用 php 后端直接从浏览器创建的。 第二个也是使用相同的 php 后端创建的,但是请求来自 IOS 应用程序。

逻辑很简单,我向服务器发送一个要创建的文件夹名称,如果该文件夹不存在则他创建它并在其中放入一个文件,否则他只是在现有文件夹中放入一个文件。

一个奇怪的发现是,如果我在 Windows 上使用 PostMan 发送请求,则会检测到现有文件夹并将文件毫无问题地放入其中,但是如果我在 Mac 上使用 Postman,我会得到同样的问题,文件夹未被检测为存在并重新创建。

这是我在 php 端检索文件夹名称的方法:

$name = $_POST["name"];

应用Normalizer::normalize -- normalizer_normalize:

<?php
$char__A_acute = "\xC3\x89";  // 'Latin Capital Letter E With Acute' (U+00C9)
$chars_A_acute = "\x45"       // 'Latin Capital Letter E' (U+0045)
               .  "\xCC\x81"; // 'Combining Acute Accent' (U+0301)
var_dump( $char__A_acute );
var_dump( $chars_A_acute );
var_dump( $char__A_acute == $chars_A_acute );                       
var_dump( Normalizer::normalize( $char__A_acute, Normalizer::FORM_D )
       == $chars_A_acute);                       
var_dump( $char__A_acute
       == Normalizer::normalize( $chars_A_acute, Normalizer::FORM_C ));                       
?>

Output(事实上,你可以在一个简单的“终端”的第 2 行看到 string(3) "E⁠´",例如 Windows 命令行 cmd):

string(2) "É"
string(3) "É"
bool(false)
bool(true)
bool(true)

理论上:normalization forms for Unicode text

仅供参考,您在 EÌ�quipe Rouge 中看到一个 mojibake 案例,因为 Ì�cp1252Combining Acute Accent[ 的 utf-8 字节的解释=33=].