я нашел функцию в PHP, которая неплохо читает файлы MS Word .doc, но когда файл содержит какой-либо из символов "ěščř...", он возвращает вопросительный знак в виде ромба (нераспознанный символ?)
функция выглядит так
if ( file_exists($filename) ) {
if ( ($fh = fopen($filename, 'r')) !== false ) {
$headers = fread($fh, 0xA00);
# 1 = (ord(n)*1) ; Document has from 0 to 255 characters
$n1 = ( ord($headers[0x21C]) - 1 );
# 1 = ((ord(n)-8)*256) ; Document has from 256 to 63743 characters
$n2 = ( ( ord($headers[0x21D]) - 8 ) * 256 );
# 1 = ((ord(n)*256)*256) ; Document has from 63744 to 16775423 characters
$n3 = ( ( ord($headers[0x21E]) * 256 ) * 256 );
# (((ord(n)*256)*256)*256) ; Document has from 16775424 to 4294965504 characters
$n4 = ( ( ( ord($headers[0x21F]) * 256 ) * 256 ) * 256 );
# Total length of text in the document
$textLength = ($n1 + $n2 + $n3 + $n4);
$extracted_plaintext = fread($fh, $textLength);
# if you want the plain text with no formatting, do this
//echo $extracted_plaintext;
echo mb_detect_encoding($extracted_plaintext);
# if you want to see your paragraphs in a web page, do this
echo nl2br($extracted_plaintext);
}
}
Также я пытаюсь изменить кодировку символов на UTF-8, в которой у меня есть весь веб-контент, примерно так
$extracted_plaintext = iconv("UTF-8","UTF-8//IGNORE",$extracted_plaintext);
Но он удаляет только недопустимые символы, поэтому текст также не читается. Так что я не уверен, действительно ли эта проблема связана с кодировкой или чем-то еще? Я думаю, что UTF-8 правильный, потому что если я использую echo mb_detect_encoding($extracted_plaintext);
, он возвращает UTF-8
редактировать: здесь прикреплен пример файла
mb_detect_encoding()
на самом деле не делает того, что все предполагают под его именем. В любом случае, устаревший формат Microsoft Word довольно старый и пришел из мира Windows. Вы уверены, что он использует UTF-8, а не UTF-16 или какую-то кодировку ANSI? - person Álvaro González   schedule 03.05.2016