gpt4 book ai didi

php - 使用 utf8_general_ci 共置正确验证插入表中的 UTF-8 字符

转载 作者:行者123 更新时间:2023-11-29 13:10:56 26 4
gpt4 key购买 nike

虽然真正的问题是数据库上字段的共置,但我无法更改它。我需要删除无效字符。

使用 @iconv('utf-8', 'utf-8//IGNORE'); 不起作用,因为这些字符是有效的 UTF8 字符,但在插入字段时无效与该主机托管。

$broken_example = '↺ﺆী▜Ꮛ︷ሚ◶ヲɸʩ𝑸ᚙ𐤄🃟ʳ⸘ᥦฆⵞ䷿ꘚꕛ𝆖𝇑𝆺𝅥𝅮↺ﺆী▜Ꮛ︷ሚ◶ヲɸʩ𝑸ᚙ𐤄🃟ʳ⸘ᥦฆⵞ䷿ꘚꕛ𝆖𝇑𝆺𝅥𝅮';
$utf8 = html_entity_decode($broken_example, ENT_QUOTES, 'UTF-8');

我尝试使用一些解决方法,例如 preg_replace('/&#([0-9]{6,});/', '');,但没有成功。

mysql 报告的错误是不正确的字符串值:'\xF0\x90\xA4\x84\xCA\xB3...'

最佳答案

用于验证所有 utf-8 字符的正则表达式是:

function removeInvalidChars ($text) {
$regex = '/( [\x00-\x7F] | [\xC0-\xDF][\x80-\xBF] | [\xE0-\xEF][\x80-\xBF]{2} | [\xF0-\xF7][\x80-\xBF]{3} ) | ./x';
return preg_replace($regex, '$1', $text);
}

删除 4 字节字符的匹配将仅允许可以存储在 utf8_general 中的字符。

function removeInvalidChars ($text) {
$regex = '/( [\x00-\x7F] | [\xC0-\xDF][\x80-\xBF] | [\xE0-\xEF][\x80-\xBF]{2}) | ./x';
return preg_replace($regex, '$1', $text);
}

顺便说一句,重要的是字符集而不是排序规则。另外,你最好只使用 utf8mb4_unicode_ci 切换到 utf8mb4,而不是像这样进行 hack。

关于php - 使用 utf8_general_ci 共置正确验证插入表中的 UTF-8 字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22115604/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com