2015-11-12 13 views
6

私はデータをデータベースにプルするフィードを持っています。データはXML形式で提供されます。ただし、データには「不正な」文字が含まれています。たとえば、次のようにXMLフィードデータに無効な文字があります

A GREAT NEIGHBOURHOOD – WITH A 

または

large “country style†eat-in 

または

Garage 14’x32’, large 

または

OR…….ENDLESS POSSIBILITIES!! 

私の質問は最初に、私はこれらの文字のエンコーディングを識別しないか、と次に、エンコーディングをマットに変更する方法私のデータベースが期待しているUTF8形式ですか?

編集:明らかにするために、このプロセスに関係するデータベースはありません(プロセスのこの時点では、とにかく)。データは後でDBに挿入されますが、現時点ではPHPスクリプトを使用してデータを読み込み、var_dumpを使用して画面に出力しています。

EDIT 2:データは、それはいくつかの点でXMLソースまたはデータと思わPHP PHRETSライブラリ

+2

正確な問題は何として手動で

CREATE DATABASE 'your_table_name' DEFAULT CHARACTER SET utf8 COLLATE utf8_polish_ci; 

フレームワークを使用したデータベースを作成しますか?フィードは '<?xml version =" 1.0 "encoding =" utf-8 "?>'またはHTTPヘッダーで独自のエンコーディングを宣言していませんか? –

+0

@ÁlvaroGonzález--いいえ、エンコーディングは宣言されていません。UTF8と仮定していますが、一部のフィードプロバイダは実際にこの権利を取得していません。 – user101289

+2

しかし、これらの文字は実際のUTF-8のように見え、ISO-8859-1と誤解されています。 –

答えて

7

問題は、UTF-8レスポンスが異なる方法で処理されているか、データベースが正しく設定されていないことです。ここでこれが起こる可能性のある例とその修正方法の例を示します。 MySQLの(私の。カール

header("Content-Type: text/html; charset=utf-8"); 

を使用する前

CNF)

[client] 
default-character-set=utf8 

[mysql] 
default-character-set=utf8 


[mysqld] 
collation-server = utf8_unicode_ci 
init-connect='SET NAMES utf8' 
character-set-server = utf8 

な教義

$conn = array(
    'driver' => 'pdo_mysql', 
    'dbname' => 'test', 
    'user' => 'root', 
    'password' => '*****', 
    'charset' => 'utf8', 
    'driverOptions' => array(1002=>'SET NAMES utf8') 
); 
4

を用いRETSフィードから引っ張られており、それはUTF-8である、として扱われるISO-8859- 1に変換され、UTF-8に変換されます。フィードの生成方法によっては、いくつかの点で発生する可能性があります。

最も可能性の高いポイントは、データベース接続のエンコードです。それがUTF-8であることを確認してください。

あなたが送信するコンテンツタイプヘッダーもあります。

4

データベースのエンコードタイプを追加して、より適切に回答できるようにしてください。

あなたは次のようにmb_detect_encodingを使用する必要があります文字列のエンコードの種類を検出するために:あなたはまた、別の1つの符号化タイプから変換するには、この機能を使用することができます

echo mb_detect_encoding("your-string"); 

$str = mb_convert_encoding($str, $source_encode, $destination_encode); 
関連する問題