我无法使用 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 删除不可打印的字符的主要内容,如果未能解决你的问题,请参考以下文章
SQL Server - 删除所有不可打印的 ASCII 字符