2011-12-24 10 views
1

ワードファイルからテキストを読むと、次のような結果が得られます。いくつかの奇妙な文字が印刷されます。それらを削除する方法はありますか?PHPで奇妙な文字があります

enter image description here

I use this function to read from docx files 

function readDocx() { 
    // Create new ZIP archive 
    $zip = new ZipArchive; 
    $dataFile = 'word/document.xml'; 
    // Open received archive file 
    if (true === $zip->open($this->doc_path)) { 
     // If done, search for the data file in the archive 
     if (($index = $zip->locateName($dataFile)) !== false) { 
      // If found, read it to the string 
      $data = $zip->getFromIndex($index); 
      // Close archive file 
      $zip->close(); 
      // Load XML from a string 
      // Skip errors and warnings 
      $xml = DOMDocument::loadXML($data, LIBXML_NOENT | LIBXML_XINCLUDE | LIBXML_NOERROR | LIBXML_NOWARNING); 
      // Return data without XML formatting tags 

      $contents = explode('\n',strip_tags($xml->saveXML())); 
      $text = ''; 
      foreach($contents as $i=>$content) { 
       $text .= $contents[$i]; 
      } 
      return $text; 
     } 
     $zip->close(); 
    } 
    // In case of failure return empty string 
    return ""; 
} 
+0

この問題を解決するために何をしましたか?どのように機能していないのですか? – sarnold

+0

修正する必要がある* encoding *の問題があるようですが、*エスケープ*とは関係ありません。詳細を教えてください。これはいつ発生するのですか?どのキャラクター*がそこにいるはずですか? – deceze

+0

質問を詳しく教えてください。 – Lion

答えて

1

これは私が最も愛する一部ではありません:

 $contents = explode('\n',strip_tags($xml->saveXML())); 
     $text = ''; 
     foreach($contents as $i=>$content) { 
      $text .= $contents[$i]; 
     } 
     return $text; 

あなたからそれをコピーしないアイデアが、それは基本的にあります:

と次
 $text = strip_tags($xml->saveXML()); 
     return $text; 

、UTF-8で文字列を返しますsaveXML()エンコーディング。あなたのブラウザは何か他のものを期待しているので、エンコーディングを変更するだけです(知っておくべきです)。

私はちょうどこれが死んでセーフにするためにHTMLエンティティに何かを包む、同様にあなたにおそらく不明であるのか分からないので:

 $text = strip_tags($xml->saveXML()); 
     return htmlentities($text, ENT_QUOTES, 'UTF-8'); 

本当の修正は実際にあなたが何をあなたを理解していることだろうブラウザに送信して、それがブラウザであることを伝えています。

0

これはPHPとは何の関係もありません...それはサーバの符号化方式の問題です。 apacheのデフォルトのエンコード設定を見てください。

関連する問題