PHP trim и Пробел не работают

У меня есть некоторые данные, импортированные из CSV. Сценарий импорта захватывает все адреса электронной почты в csv и после их проверки импортирует их в БД.

клиент предоставил этот csv, и некоторые из писем, похоже, имеют место в конце ячейки. Нет проблем, обрежь эту присоску... нет, не получится.

пространство, похоже, не является пространством и не удаляется, поэтому не удается проверить кучу писем.

вопрос: любой как я могу определить, что это за ошибочный символ, и как я могу его удалить?

Не уверен, что это какая-то фанковая кодировка или что-то еще происходит, но я не хочу проходить и удалять их все вручную! Если я UTF-8 сначала кодирую строку, она показывает этот символ как:

Â

4 ответов


Если это "пространство" не влияет trim() первый шаг-это определить его.

использовать urlencode() в строке. Urlencode будет процент-избежать любых непечатаемых и много печатаемых символов, кроме ASCII, так что вы увидите шестнадцатеричный код оскорбительных символов мгновенно. В зависимости от того, что вы обнаружите, вы можете действовать соответственно или обновить свой вопрос, чтобы получить дополнительную помощь.


У меня была аналогичная проблема, также загрузка писем из CSVs и проблемы с "неопределяемыми" пробелами.

разрешил его, заменив наиболее распространенные символы пробелов 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

обратите внимание, что это не удаляет "нормальный" символ пробела и что он удаляет эти символы пробелов из любого места в строке - не только начало или конец.


в большинстве случаев простой strip_tags($string) будет работать.

Если выше не работает, то вы должны попытаться определить символы, прибегающие к urlencode() а затем действуйте соответственно.


Я вижу пары возможных решений

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