我无法使用 PHP 删除不可打印的字符

Posted

技术标签:

【中文标题】我无法使用 PHP 删除不可打印的字符【英文标题】:I can't remove non printable characters with PHP 【发布时间】:2019-10-31 12:05:32 【问题描述】:

使用 getID3,有时标签中有特殊字符(带问号的小黑菱形),但我似乎无法删除它们

我从这里尝试了一切

php: How to remove all non printable characters in a string?

在数据库 (phpMyAdmin) 中,当打印出来时,它们显示为 ??在数据的开头。

问题是,我根本不希望这些字符出现在数据库中(无论它们正确显示还是显示为问号)

但是,我尝试过的代码都不会删除 PHP 中的这些特殊字符

【问题讨论】:

如果您的字符显示为 ??然后你在某个地方搞砸了。 好吧,getID3 每次都在读取['id3v2']['TALB'][0]['data'] 开头的这两个字符。我假设 ??是因为编码类型,但是这两个字符一开始就不应该在那里 【参考方案1】:

如果您看到这种情况,则说明您使用了错误的编码,而您没有共享该编码。所需的编码基于数据库中的字符集。

例如,在 mysql 中,首先运行 SHOW CHARACTER SET FOR mydatabase;,然后再运行 SHOW CHARACTER SET FOR mydatabase.mytable; 以获取正确的字符集。

然后您可以设置正确的编码。

【讨论】:

数据库为utf8mb4_general_ci,每个表为latin1_swedish_ci。在 getid3 信息上使用 print_r 或回显某些值时,会出现特殊字符。问题不在于它们在数据库中的显示方式,问题是我根本不希望这些字符(2 个空格)出现在数据库中。 @cantsay 删除任何您不想要的特殊字符是一条丑陋的道路,最好在存储之前对其进行正确编码。 ***.com/questions/910793/… 尝试将表和列排序规则都设置为utf8mb4_general_ci,然后当您连接到 MySQL 数据库时,您还必须指示数据库服务器使用 UTF-8 (see this answer] 进行通信。

以上是关于我无法使用 PHP 删除不可打印的字符的主要内容,如果未能解决你的问题,请参考以下文章

从python中的字符串中去除不可打印的字符

PHP 删除 Windows ^M 字符

SQL Server - 删除所有不可打印的 ASCII 字符

无法使用 PHP PDO 获取 SQL Server 打印消息

打印机驱动无法使用及打印机驱动彻底删除方法

无法从字符串数组中删除空格