web-dev-qa-db-ja.com

drupalノードの作成にcsvファイルを使用して他の言語で問題をインポートする

_parsecsv-for-php_ライブラリを使用してcsvファイルをインポートしようとしています。指定されたcsvファイルは_Catalan language_にあります。

問題は、与えられたcsvデータでノードを作成しようとすると、PDOException: in field_sql_storage_field_storage_write() (line 448 of /modules/field/modules/field_sql_storage/field_sql_storage.module).のインポート中にこのようなエラーが発生することです

この問題を解決するには、各フィールドにtf8_encode関数を使用し、そのエラーを回避したことです。

正常にインポートした後、ここでの問題は、これがcsvの本文テキストであることです

Thomas Alva Edison va anunciar lainvenciódelfonògrafl’any 1877、fent unademostracióaquest mateix any。 L'any 1878 el va Patentals als Estats Units。登録者va fer servir cilindres decartrórecoberts d’estanyごとの開始、最終決定ごとのutilitzar cilindres de cerasòlida。 1889年のファン・セル・コメルシアリッツ・エイツ・クエスト。ラ・コンペテンシア・アンブル・エルス・ディスコ・ソナース・バ・アカババル・エリミナール・エル・シリンドレス・デ・セラ・カペルス・エニー1920年代。 Tot iaixívan sobreviure uns anysméscom a support d'enregisttrament a oficines amb eldictàfon。

drupal iのインポートされた本文テキストは画像として表示されています

enter image description here

Uを両方比較すると、uのように本文に特定の違いがあることがわかります。

l`any csv body text in drupal as lanyとしてインポートされます

d`estanyはdrupalにインポートされます。

d`enregistramentがdrupalにdenregistramentとしてインポートされます

同じテキストをdrupalにもインポートしたいのですが、記号や特殊文字が欠落していません。何が問題なのですか。

アップロードしたcsvファイル形式も添付しました。

Drupalでこの文字(')だけが正しく表示されません。これについてのヘルプは本当にありがたいです。よろしくお願いします

enter image description here

1
Ram

私はこの問題を克服する方法を見つけました。私が正確に行ったことは、インポートされたビューで、別のcharset=ISO-8859-1は、dbからシンボルまたは文字を取得して、適切に表示します。

<?php
drupal_add_http_header('Content-Type', 'text/html; charset=ISO-8859-1,utf-8');
$new_output = utf8_decode($output);
echo $new_output;
?>

これにより、欠落していたすべての特殊文字または記号が元に戻りました。

1
Ram

データベースに保存されているマークアップを確認できますか?テーブルfield_data_bodyは、デフォルトではutf8にあるようです。これにより、field_formattersがプレゼンテーションレイヤーの文字を乱す可能性がなくなります。

データベース内のデータが破損している場合は、たとえば、utf8_encodeの出力をログに記録してみてください。インポートツールを使用する前に、外部ツールを使用してcsvをutf8にエンコードすることはできますか?

ファイルのエンコーディングはトリッキーであり、モジュールファイルで誤ったエンコーディングを使用しても、マークアップが変更される可能性があります。私のサービスから別のシステム更新コンテンツを提供するために、いくつかのxml-filesをISO-8859-1として出力する必要があります。ide-withdefaultエンコーディングを使用しても、ファイル形式を変更することでモジュール出力が壊れる可能性があります。したがって、さらに絞り込んでいくと、ブレークポイントが見つかります。

元のpdo-exceptionは、´-charが正しく読み取られたことを示している可能性がありますが、テキスト区切り文字と見なされていました。その場合は、エスケープを使用してください。その場合、$ row_field = '"' .addslashes($ row_field)。 '"'のようなものを使用して元のインポートを実行します。データベースに保存する前。

Addlashesの代わりはcheck_plain($ row_field)です。

これらが機能しない場合、データベースが ' tf8mb4、 "real" 'をサポートしていない可能性があります。

0
user20301