我有一些从csv导入的数据。导入脚本会获取csv中的所有电子邮件地址,并在验证它们之后将其导入数据库。
客户端已提供此csv,并且某些电子邮件似乎在单元格的末尾有一个空格。没问题,修剪那个傻瓜......不,不会工作。
该空间似乎不是一个空间,并且没有被删除,因此未通过大量电子邮件验证。
问题:我能以任何方式实际检测到这个错误字符是什么,以及如何将其删除?
不确定它是否有一些时髦的编码,或其他什么东西,但我不想看到它们全部手动删除它们!如果我首先对UTF-8进行编码,则将该字符显示为:
A
答案 0 :(得分:27)
如果“空格”不受trim()
影响,则第一步是识别它。
在字符串上使用urlencode()
。除了ASCII之外,Urlencode将百分比转义任何不可打印和许多可打印字符,因此您将立即看到违规字符的十六进制代码。根据您发现的内容,您可以采取相应措施或更新您的问题以获得更多帮助。
答案 1 :(得分:2)
我遇到了类似的问题,也从CSV加载电子邮件,并且无法检测到"无法检测到"空格。
通过用'替换最常见的urlencoded空格字符来解决它。如果不能使用mb_detect_encoding()和/或iconv()
,这可能会有所帮助 $urlEncodedWhiteSpaceChars = '%81,%7F,%C5%8D,%8D,%8F,%C2%90,%C2,%90,%9D,%C2%A0,%A0,%C2%AD,%AD,%08,%09,%0A,%0D';
$temp = explode(',', $urlEncodedWhiteSpaceChars); // turn them into a temp array so we can loop accross
$email_address = urlencode($row['EMAIL_ADDRESS']);
foreach($temp as $v){
$email_address = str_replace($v, '', $email_address); // replace the current char with nuffink
}
$email_address = urldecode($email_address); // undo the url_encode
请注意,这并不会剥夺正常情况。空格字符,它从字符串中的任何位置删除这些空白字符 - 不仅仅是开始或结束。
答案 2 :(得分:1)
在大多数情况下,简单的strip_tags($string)
都可以使用。
如果上述方法不起作用,那么您应该尝试识别诉诸urlencode()
的字符,然后采取相应的行动。
答案 3 :(得分:0)
我看到了几种可能的解决方案
1)在PHP中获取字符串的最后一个字符串并检查它是否是普通字符(例如使用regexp)。如果它不是普通字符,则将其删除。
$length = strlen($string);
$string[($length-1)] = '';
2)将您的角色从UTF-8转换为CSV文件的编码并使用str_replace。例如,如果CSV是用ISO-8859-2
编码的echo iconv('UTF-8', 'ISO-8859-2', "Â");