Как читать в файле спецификации UTF8 + с помощью PHP и не отображать эту информацию в качестве содержимого?

0

Довольно многое, о чем говорит этот вопрос. Я нашел много рекомендаций о том, как удалить знак байтового порядка после чтения текста, но это кажется неправильным. Разве нет стандартного способа чтения на языке в Unicode файле с надлежащим распознаванием и обработкой спецификации?

Теги:
unicode
utf-8

2 ответа

1
Лучший ответ

Неа. Вы должны сделать это вручную.

Спецификация является частью порядка байтов сигнализации в кодировках UTF-16LE и UTF-16BE, поэтому имеет смысл интерпретировать UTF-16-декодеры автоматически (и многие из них).

Однако UTF-8 всегда имеет один и тот же порядок байтов и нацелен на совместимость с ASCII, поэтому включение спецификации не было предусмотрено как часть схемы кодирования, как указано, и поэтому на самом деле он не должен получать никакого специального лечения от UTF-8 декодеры.

Фальшивая спецификация UTF-8 не является частью кодировки, но ad hoc (и несколько противоречивый) маркер некоторые (преимущественно Microsoft) приложения используют, чтобы сигнализировать, что файл, вероятно, UTF-8. Это не стандарт сам по себе, поэтому спецификации, основанные на UTF-8, такие как XML и JSON, должны были сделать для него специальное разрешение.

0

была такая же проблема. моя функция _fread() удалит бомбу и решит проблему для меня...

/**
 * Read local file
 * @param   file   local filename
 * @return  Data from file, or false on failure
 */
function _fread ($file = null) {
    if ( is_readable($file) ) {
        if ( !($fh = fopen($file, 'r')) ) return false;
        $data = fread($fh, filesize($file));

        // remove bom
        $bom = pack('H*','EFBBBF');
        $data = preg_replace("/^$bom/", '', $data);

        fclose($fh);
        return $data;
    }
    return false;
}

Ещё вопросы

Сообщество Overcoder
Наверх
Меню