作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一个 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>
最佳答案
您不需要在 PHP 中设置编码。您应该使用 SET NAMES 'latin1'
作为第一个 SQL 语句。
更新:
我认为您的服务器配置有误。我已经运行了这段代码并且一切正常
<?php
$lnk=mysql_connect('localhost', 'root', '');
mysql_select_db('test', $lnk);
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());
else
print("INSERT INTO members (id, isfg_no, lab_id, first, last)VALUES ('$id', '$isfg_no', '$lab_id', '$first', '$last')<br />");
}
?>
和这个 XML
<?xml version="1.0" encoding="latin1" ?>
<SOCIOS_INTRA>
<row>
<SO_IdSocio>2</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><row>
<SO_IdSocio>3</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>
</SOCIOS_INTRA>
关于php - 如何将 XML 放入 mysql 表中并保持编码?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12357080/
我是一名优秀的程序员,十分优秀!