我有一个 XML 文件,其中包含来自 latin1 编码的 latin1_swedish_ci 整理表的数据,我想将其传输到另一个 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>