@ak_wi

Как удалить невидимые пробелы из строки в php?

После импорта CSV файла, сгенерированного в 1С, значения почему-то сохраняются как строки, начинающиеся с пробела" 0212903322". Использование trim ситуации не меняет. CSV файл имеет кодировку utf8. В чем может быть проблема?
  • Вопрос задан
  • 1634 просмотра
Решения вопроса 1
FanatPHP
@FanatPHP
Чебуратор тега РНР
В пресловутом BOM, конечно.

При любых проблемах с "невидимыми" символами надо использовать urlencode()

после того как на месте невидимых символов выведет что-то вроде %EF%BB%BF, тупо заменить проценты на слеши, и вырезать из начала строки

if(substr($str, 0, 3) == "\xEF\xBB\xBF") {
    $str = substr($str, 3);
}
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
Sanovskiy
@Sanovskiy
Веб-разработчик с 2005 года
ak_wi,
Многие программы добавляют байты 0xEF, 0xBB, 0xBF в начале любого документа, сохраняемого как UTF-8. Это метка порядка байтов Юникода (англ. Byte Order Mark, BOM), также её часто называют сигнатурой (соответственно, UTF-8 и UTF-8 with Signature).
/**
 * Удалить BOM из строки
 * @param string $str - исходная строка
 * @return string $str - строка без BOM
 */
function removeBOM($str="") {
    if(substr($str, 0, 3) == pack('CCC', 0xef, 0xbb, 0xbf)) {
        $str = substr($str, 3);
    }
    return $str;
}

// Строка, например, полученная при помощи file_get_contents()
$str = 'Строка с BOM';
 
// Строка без BOM
$str = removeBOM($str);
 
echo $str;


Решений множество
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы