提问人:VaN 提问时间:6/1/2023 更新时间:6/1/2023 访问量:57
删除文件名中的粗体字符
getting rid of bold characters in a filename
问:
MySQL最近向我报告了以下错误:[HY000][1366] Incorrect string value: '\xF0\x9D\x98\xBD\xF0\x9D...' for column 'name'
经过调查,我发现带有奇怪字符的值来自文件名,该文件显然包含粗体字符:4 𝘽𝘼𝙉𝘿𝙀 𝘼𝙉𝙉𝙊𝙉𝘾𝙀 - TV.mp4
与其更改数据库的编码以接受此类字符,我宁愿在 PHP 中插入值之前对其进行清理。但是我不知道我应该运行哪个操作以以下清理值结束:4 BANDE ANNONCE - TV.mp4
任何帮助将不胜感激。
答:
2赞
Paul Lake
6/1/2023
#1
您可以使用 PHP 函数将字符串从一种字符编码转换为另一种字符编码。在这种情况下,您可以尝试将字符串从 至 转换为 ,这将尝试将任何非 ASCII 字符音译为最接近的 ASCII 等效字符。iconv
UTF-8
ASCII//TRANSLIT
下面是一个示例:
function sanitize_string($input_string) {
$sanitized_string = iconv("UTF-8", "ASCII//TRANSLIT", $input_string);
return $sanitized_string;
}
$filename = "4 𝘽𝘼𝙉𝘿𝙀 𝘼𝙉𝙉𝙊𝙉𝘾𝙀 - TV.mp4";
$sanitized_filename = sanitize_string($filename);
echo $sanitized_filename;
这应该输出 ,这是您要查找的清理值。4 BANDE ANNONCE - TV.mp4
评论
0赞
VaN
6/1/2023
是的,这也是我发现的最准确的修复程序。在编写单元测试时,我偶然发现了一个问题:将去掉大写字母并返回。有没有办法让“干净”的字符保持不变?iconv("UTF-8", "ASCII//TRANSLIT", "Clean File Name.mp4")
clean file name.mp4
0赞
Chris Haas
6/1/2023
@VaN,当我尝试它时,情况并非如此,但这可能取决于您系统的底层 iconv 实现: 3v4l.org/hs41h
评论
𝘽