12

我有一些从 csv 导入的数据。导入脚本抓取 csv 中的所有电子邮件地址,并在验证它们之后,将它们导入数据库。

一个客户提供了这个 csv,一些电子邮件似乎在单元格的末尾有一个空格。没问题,把那个吸盘剪掉……不,行不通。

该空间似乎不是一个空间,并且没有被删除,因此无法通过一堆电子邮件验证。

问题:我可以通过什么方式实际检测到这个错误字符是什么,以及如何删除它?

不确定它是不是一些时髦的编码,还是发生了其他事情,但我不喜欢手动完成并删除它们!如果我首先对字符串进行 UTF-8 编码,则会将此字符显示为:

一个

4

4 回答 4

38

如果那个“空间”不受 影响trim(),第一步是识别它。

urlencode()在弦上。Urlencode 将百分比转义除 ASCII 之外的任何不可打印字符和大量可打印字符,因此您将立即看到违规字符的十六进制代码。根据您的发现,您可以采取相应措施或更新您的问题以获得更多帮助。

于 2013-08-18T14:56:53.457 回答
3

我遇到了类似的问题,还从 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

请注意,这不会删除“正常”空格字符,而是会从字符串中的任何位置删除这些空白字符 - 而不仅仅是开始或结束。

于 2016-01-19T02:03:07.033 回答
1

在大多数情况下,一个简单的strip_tags($string)就可以了。

如果上述方法不起作用,那么您应该尝试识别所使用的字符urlencode(),然后采取相应措施。

于 2014-11-10T11:48:12.740 回答
0

我看到了几个可能的解决方案

1)在PHP中获取字符串的最后一个字符并检查它是否是普通字符(例如使用正则表达式)。如果不是正常字符,则将其删除。

$length = strlen($string);
$string[($length-1)] = '';

2) 将字符从 UTF-8 转换为 CSV 文件的编码并使用 str_replace。例如,如果您的 CSV 以 ISO-8859-2 编码

echo iconv('UTF-8', 'ISO-8859-2', "Â"); 
于 2013-08-18T14:14:09.210 回答