PHP修剪和空间不起作用

时间:2013-08-18 14:04:19

标签: php encoding space trim

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

客户端已提供此csv,并且某些电子邮件似乎在单元格的末尾有一个空格。没问题,修剪那个傻瓜......不,不会工作。

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

问题:我能以任何方式实际检测到这个错误字符是什么,以及如何将其删除?

不确定它是否有一些时髦的编码,或其他什么东西,但我不想看到它们全部手动删除它们!如果我首先对UTF-8进行编码,则将该字符显示为:

  

A

4 个答案:

答案 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', "Â");