0

我通过 WYSIWYG 编辑器 ( https://summernote.org/ ) 输入了一个字符串。我遇到的问题是,当有人从 Google Docs 之类的地方粘贴文本时,它使用撇号如下:

child’s

然后我将其存储在数据库中(字符集:utf8mb4 排序规则:utf8mb4_unicode_ci)

显示数据时,它在 Mac 上的 safari 上显示为带有问号符号,但在 PC 上的 chrome 上显示正常。

我还发送了一封包含该文本的电子邮件,当它击中那个撇号时,它会完全中断电子邮件。

我尝试了以下解决方案,但似乎没有一个对我有帮助:

$str = mb_convert_encoding($str, 'UTF-8','utf8mb4');
$str = str_replace("’","'",$str);
$str = strtr($str,array("’" => "'"));

回声 mb_detect_encoding($str); // 产生 UTF-8

我理想的方法是将字符转换为“常规”撇号,然后再将其存储在数据库中。

我见过类似的问题,并测试了我见过的所有答案(包括那些没有被选为接受的答案,但没有一个有效的答案)

通过 AWS 简单电子邮件服务使用 PHPMailer

看来以下作品可用于替换撇号

function convert_smart_quotes($string) 
{ 
   $search = [                 
                "\xC2\xAB",     // « (U+00AB) in UTF-8
                "\xC2\xBB",     // » (U+00BB) in UTF-8
                "\xE2\x80\x98", // ‘ (U+2018) in UTF-8
                "\xE2\x80\x99", // ’ (U+2019) in UTF-8
                "\xE2\x80\x9A", // ‚ (U+201A) in UTF-8
                "\xE2\x80\x9B", // ‛ (U+201B) in UTF-8
                "\xE2\x80\x9C", // “ (U+201C) in UTF-8
                "\xE2\x80\x9D", // ” (U+201D) in UTF-8
                "\xE2\x80\x9E", // „ (U+201E) in UTF-8
                "\xE2\x80\x9F", // ‟ (U+201F) in UTF-8
                "\xE2\x80\xB9", // ‹ (U+2039) in UTF-8
                "\xE2\x80\xBA", // › (U+203A) in UTF-8
                "\xE2\x80\x93", // – (U+2013) in UTF-8
                "\xE2\x80\x94", // — (U+2014) in UTF-8
                "\xE2\x80\xA6"  // … (U+2026) in UTF-8
    ];

    $replacements = [
                "<<", 
                ">>",
                "'",
                "'",
                "'",
                "'",
                '"',
                '"',
                '"',
                '"',
                "<",
                ">",
                "-",
                "-",
                "..."
    ];

    return str_replace($search, $replacements, $string);
} 
4

0 回答 0