我编写了一个php脚本,它从数据库中提取一些数据并以XML格式显示。出于某种原因,当它到达数据中的撇号时,它会停止输出。这是一个SELECT语句,一个简单的语句,所以我不明白为什么撇号或引号有任何问题。我尝试过使用addslashes()和mysql_real_escape_string(),尽管我的理解是那些用于清理插入数据库的数据,但它没有帮助。我很难过。以下是代码,并提前感谢任何建议!
<? if($result = $mysqli->query("SELECT * FROM ".$tbl)){
while($row = $result->fetch_object()){ ?>
<slide>
<id><?= $row->id ?></id>
<title><?= $row->title ?></title>
<chatter><?= $row->description ?></chatter>
<image><?= $row->path ?></image>
<link><?= $row->href ?></link>
<active><?= $row->active ?></active>
</slide>
<? }
}else{
echo $mysqli->error;
}
编辑: 事实证明我误解了这个问题。它们不是撇号,而是正确的单引号。如果我将它们更改为实际的撇号,则脚本可以工作,但我仍然不明白为什么它不会简单地输出它们。
答案 0 :(得分:0)
尝试使用str_replace("'", "\'", $field_to_be_replaced);
如果您愿意,可以使用空格替换'
字符,仅用于测试。
答案 1 :(得分:0)
撇号(')是 XML 的无效字符!
您之前必须在所有字段中致电$safe_string = str_replace("'","'",$string)
输出.XML文件。
检查here以了解这些字符并构建更完整的str_replace
修改强>
我在使用什么:
// save ubercart products in XML
function replace_characters_for_xml($str) {
return str_replace(
array("&",">","<","'",'"'),
array("&",">","<","'","""),$str
);
}
...
$row->title = replace_character_for_xml($row->title);
$row->href = replace_character_for_xml($row->href);
...
答案 2 :(得分:0)
您确定它会在数据输出上停止,而不是在处理数据时停止吗? Apostrophe在XML中具有特殊含义,因此如果它们包含在XML数据中,则必须使用实体引用替换它们。 XML中有5个预定义的实体引用,少于,大于,&符号,撇号和引号。或者,您可以将文本标记为CDATA,以便XML解析器不会尝试解析它。
尝试让程序将XML数据输出到文本文件而不是现在的任何位置。是否仍然停止撇号?如果没有,那肯定是因为解析数据的问题。如果您的程序即使仅将数据输出到文本文件时仍然停止在撇号上,则程序中处理该数据的其他位置可能存在问题。检查包含数据的变量的所有引用,看看是否可以找到程序中断的确切行。