latin1 でエンコードされ、latin1_swedish_ci で照合されたテーブルのデータを含む XML ファイルを別の mysql テーブルに転送したいと考えています。同じエンコーディングで宛先テーブルを設定しました。テーブルの各行についてデータベースにクエリを実行すると、すべての特殊文字が台無しになります。XML ファイルのエンコーディングも設定しました<?xml version="1.0" encoding="latin1" ?>
。PHPの問題でしょうか?エンコーディングを別の場所に設定する必要がありますか:
これが私のスクリプトです:
// create table courses if not exists
echo("Creating new tables...\n");
if (!mysql_query("CREATE TABLE IF NOT EXISTS members (
id int(11) NOT NULL,
isfg_no int(11) NOT NULL,
lab_id int(11) NOT NULL,
first varchar(256) NOT NULL,
last varchar(512) NOT NULL,
PRIMARY KEY (id)
) ENGINE=InnoDB DEFAULT CHARSET=latin1"))
die(mysql_error());
// load xml file
echo "Loading XML file...\n";
$members = simplexml_load_file("members.xml");
foreach ($members as $row) {
$id = mysql_real_escape_string($row->SO_IdSocio);
$isfg_no = mysql_real_escape_string($row->SO_Numisfg);
$lab_id = mysql_real_escape_string($row->SO_Numlab);
$first = mysql_real_escape_string($row->SO_Nombre);
$last = mysql_real_escape_string($row->SO_Apellidos);
if (!mysql_query("INSERT INTO members (id, isfg_no, lab_id, first, last)VALUES ('$id', '$isfg_no', '$lab_id', '$first', '$last')"))
die(mysql_error());
}
XML の一部を次に示します。
<?xml version="1.0" encoding="latin1" ?>
<SOCIOS_INTRA>
<row>
<SO_IdSocio>1</SO_IdSocio>
<SO_Numsocio>001</SO_Numsocio>
<SO_Numisfg>404</SO_Numisfg>
<SO_Nombrelab>SIN LABORATORIO</SO_Nombrelab>
<SO_Numlab>0</SO_Numlab>
<SO_Nombre>******</SO_Nombre>
<SO_Apellidos>*******</SO_Apellidos>
<SO_Direccion>C/Recoletos 22, 3ª planta</SO_Direccion>
<SO_Cp>28001</SO_Cp>
<SO_Poblacion>Madrid</SO_Poblacion>
<SO_Provincia>Madrid</SO_Provincia>
<SO_Idpais>25</SO_Idpais>
<SO_Email1>*******</SO_Email1>
<SO_Email2></SO_Email2>
<SO_Telefono>***</SO_Telefono>
<SO_Fax>****</SO_Fax>
<SO_Login></SO_Login>
<SO_Password></SO_Password>
<SO_Fecha>19960101</SO_Fecha>
<SO_SituacionISFG>0</SO_SituacionISFG>
<SO_SituacionGEP>1</SO_SituacionGEP>
<SO_Observaciones></SO_Observaciones>
</row>