对文本文件内容无法执行任何操作(file_get_contents)

时间:2014-11-28 19:33:50

标签: php laravel

固定!

文件编码为UTF-16LE,在PhpStorm中更改为UTF-8并且行为正常。

=============================================== ============

我正在阅读PHP中的文本文件并希望阅读和操作内容,但是一旦我触摸到文件的阅读内容,它就会中断'

如果我读取该文件然后回显它,则会显示文本,但任何其他操作都无效。

$contents = file_get_contents($file);
echo $contents; // works
$contents .= 'a longer test' . $contents;
echo $contents;

我的最终目标是在将内容转储到数据库之前对内容运行一些正则表达式,但我需要首先使用它。

如果它有任何区别我正在使用Laravel。我试过File::get($file),但结果相同。

编辑显示输出 - Unicode问题?

  

//// first echo POUR L ’É T U DE DE L ’H IST O IR E ET DE LA LANGUE DU PAYS, LA CONSERVATION DES A N TIQ U ITÉS DE L ’IL E , ET LA PUBLICATION DE DOCUMENTS HISTORIQUES, ETC., ETC. FONDÉE LE 28 JANVIER, 1873. DIXIÈME BULLETIN ANNUEL. : C. LE F E U VRE, IM PR IM E U R -É D IT EU R D E LA SOCIÉTÉ, BERESFORD LIBRARY , ST. -H ÉLIE R . 1885. = Page 1 =

     

// Second echo POUR L ’É T U DE DE L ’H IST O IR E ET DE LA LANGUE DU PAYS, LA CONSERVATION DES A N TIQ U ITÉS DE L ’IL E , ET LA PUBLICATION DE DOCUMENTS HISTORIQUES, ETC., ETC. FONDÉE LE 28 JANVIER, 1873. DIXIÈME BULLETIN ANNUEL. : C. LE F E U VRE, IM PR IM E U R -É D IT EU R D E LA SOCIÉTÉ, BERESFORD LIBRARY , ST. -H ÉLIE R . 1885. = Page 1 =⁡潬杮牥琠獥エ෾਀ഀ਀匀伀䌀䤀䔀吀䔀  䨀䔀刀匀䤀䄀䤀匀䔀ഀ਀倀伀唀刀  䰀 ᤀ줠 吀 唀 䐀䔀  䐀䔀  䰀 ᤀ䠠 䤀匀吀 伀 䤀刀 䔀  䔀吀  䐀䔀  䰀䄀  䰀䄀一䜀唀䔀  䐀唀  倀䄀夀匀Ⰰഀ਀䰀䄀  䌀伀一匀䔀刀嘀䄀吀䤀伀一  䐀䔀匀  䄀 一 吀䤀儀 唀 䤀吀준匀  䐀䔀  䰀 ᤀ䤠䰀 䔀 Ⰰ  䔀吀  䰀䄀  倀唀䈀䰀䤀䌀䄀吀䤀伀一 ഀ਀䐀䔀  䐀伀䌀唀䴀䔀一吀匀  䠀䤀匀吀伀刀䤀儀唀䔀匀Ⰰ  䔀吀䌀⸀Ⰰ  䔀吀䌀⸀ഀ਀䘀伀一䐀준䔀  䰀䔀  ㈀㠀  䨀䄀一嘀䤀䔀刀Ⰰ  ㄀㠀㜀㌀⸀ഀ਀䐀䤀堀䤀저䴀䔀  䈀唀䰀䰀䔀吀䤀一  䄀一一唀䔀䰀⸀ഀ਀㨀ഀ਀䌀⸀  䰀䔀   䘀 䔀 唀 嘀刀䔀Ⰰ  䤀䴀 倀刀 䤀䴀 䔀 唀 刀 ⴀ준 䐀 䤀吀 䔀唀 刀   䐀 䔀  䰀䄀  匀伀䌀䤀준吀준Ⰰഀ਀䈀䔀刀䔀匀䘀伀刀䐀  䰀䤀䈀刀䄀刀夀 Ⰰ  匀吀⸀ ⴀ䠀 준䰀䤀䔀 刀 ⸀ഀ਀㄀㠀㠀㔀⸀਀ഀ 㴀 倀愀最攀 ㄀ 㴀

如果我将第一个字符串放入HEREDOC一切正常,那么可能是txt文件的东西?它是从旧的PDF文件中提取OCRd中的文本。

完整代码

public function import()
{
    // get all the files
    $files = File::files('../import');


    foreach ($files as $file) {
        // load text file contents
        $contents = file_get_contents($file);
        echo $contents; // as expected
        $contents .= 'a longer test' . $contents;
        echo $contents; // weird stuff

// test txt file contents inline
$contents2 = <<<EOD
SOCIETE  JERSIAISE
POUR  L ’É T U DE  DE  L ’H IST O IR E  ET  DE  LA  LANGUE  DU  PAYS,
LA  CONSERVATION  DES  A N TIQ U ITÉS  DE  L ’IL E ,  ET  LA  PUBLICATION
DE  DOCUMENTS  HISTORIQUES,  ETC.,  ETC.
FONDÉE  LE  28  JANVIER,  1873.
DIXIÈME  BULLETIN  ANNUEL.
:
C.  LE   F E U VRE,  IM PR IM E U R -É D IT EU R   D E  LA  SOCIÉTÉ,
BERESFORD  LIBRARY ,  ST. -H ÉLIE R .
1885.

 = Page 1 =


EOD;


        echo $contents2; // works
        $contents2 .= 'a longer test' . $contents2;
        echo $contents2; // prints as expected

    }

2 个答案:

答案 0 :(得分:1)

固定!

文件编码为UTF-16LE,在PhpStorm中更改为UTF-8并且行为正常。

或代码:

foreach ($files as $file) {
        // load text file contents
        $contents = file_get_contents($file);

        // fix encoding
        $contents = mb_convert_encoding($contents, 'UTF-8', 'UTF-16');
        echo $contents;
        .....

答案 1 :(得分:0)

$data_to_write = 'test';
$file_handle = fopen($file, 'a'); 
fwrite($file_handle, $data_to_write);
fclose($file_handle);