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