2012-07-23 11 views
7

文字エンコーディングにほとんど問題はありません。データベース、文字エンコーディング、PDFおよびXML

XMLに変換される状況

ファイルがアップロードされます。このファイルの文字エンコーディングは異なりますが、スマート引用符、エンティティ、およびさまざまなASCIIが表示されることがあります。このファイルがXMLに変換されると、データベースに格納されます。ユーザーの要求に応じて、XMLはデータベースから抽出され、配列に変換され、次にPDFに作成されます。

問題

文字エンコーディング。最初から文字エンコーディングが大きな問題となっています。私が知りたいのですが;

  • 一般に、どの文字エンコーディングが「スペクトル」全体をカバーしていますか?たとえば、°は、XMLまたはスマート・クォート()の解析時に認識されません。スマートな見積もりは、’などになります。
  • XMLをデータベースに保存する方法。暗号化は可能ですが、データベースのエンコーディングはどこで失われています。
  • エンティティ、スマート引用符(および問題を引き起こす可能性のあるその他の文字)を正しくデータベースに表示し、Åをstuffの前に表示する方法。他にいくつかの文字を変換する - 仕事で

試みが周り

私は私の問題を解決するための「試み」様々な機能を作ってきました。しかし、私はこれがだと完全にであると仮定しています。私は文字エンコーディングを変更する必要があります。

/* 
* Converts smart quotes to ascii 
*/ 
function convert_smart_quotes($string) { 
    $string = iconv("UTF-8", "UTF-32", $string); 
    $string = mb_convert_encoding($string, 'HTML-ENTITIES', 'UTF-32'); 
    $string = str_replace('', '', $string); 
    $search = array('‘', '’', '“', '”', '—'); 
    $replace= array("'", "'", '"', '"', '-'); 
    $string = str_replace($search, $replace, $string); 
    return $string; 
} 
/* 
* Converts some entities to an ISO format? 
* 
* Example : ° => ° 
*/ 
function entity_to_iso($string) { 
    return html_entity_decode($string, ENT_QUOTES & ~ENT_COMPAT, 'ISO-8859-1'); 
} 

私の問題は、アップロードされたファイルのエンコーディングがわからないという事実にあります。私はswitchというアイデアを持っていて、文字を何か他のデータベースに変換して "PDFにやさしい"ものにしようとしました。しかし、多くのグーグルは、苦い仕事の周囲や配列str_replace別のものをもたらしている。これは本当に解決策ですか?

より良い方向に指し示されたアドバイス、解決策または指は、すべて参考になり非常に高く評価されます。ありがとうございました。

+0

こんにちはメイト、私はこれと似た問題を抱えていましたか? – Drakoumel

答えて

0

ファイルのエンコーディングを検出するのは難しい問題です。UTFはBOMが最初からあるため簡単ですが、エンコーディングタイプを正しく判別することはほとんど不可能です。

しかし、XMLが適切にフォーマットされている場合は、エンコーディングが埋め込まれている必要があり、パーサーはそれをうまく処理する必要があります。私はあなたがUTF-8からUTF-32への変換を行っているのを見ていますが、これは文字列を少し大きくするだけで役に立ちませんが、文字をエンコードするコードポイントは変更されません。

XMLパーサーにファイルのエンコーディングを依頼してから、格納または処理する前に、そのファイルをUTF-8(または32)に変更する必要があります。

1

私があなたの場合、私は2つのうちの1つを行います。私はデータベースのエンコーディングが全く入ってこないように、データベースにエンコーディングせずに(BLOBとして)データを格納するだけです。

他にも、データベースに情報を保存しないでください。ファイルに保存して(名前を付けて、一意になるような名前のファイルに名前を付けて)、xmlを持つファイルの場所を格納するテーブルをデータベースに作成します。その後、ファイルから直接XMLを提供することができます。

関連する問題