2

我编写了一个 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;
}

编辑:原来我误解了这个问题。它们不是撇号,而是正确的单引号。如果我将它们更改为实际的撇号,脚本可以工作,但我仍然不明白为什么它不简单地输出它们。

4

3 回答 3

0

撇号(')XML的无效字符!$safe_string = str_replace("'","&apos;",$string)在输出 .XML 文件之前,您必须调用所有字段。

点此了解这些字符并构建更完整str_replace

编辑:

我在用什么:

// save ubercart products in XML
function replace_characters_for_xml($str) {
   return str_replace(
      array("&",">","<","'",'"'),
      array("&amp;","&gt;","&lt;","&apos;","&quot;"),$str
   );
}
...
$row->title = replace_character_for_xml($row->title);
$row->href = replace_character_for_xml($row->href);
...
于 2012-06-05T16:04:29.127 回答
0

尝试str_replace("'", "\'", $field_to_be_replaced);

如果您愿意,可以将'字符替换为空格,仅用于测试。

于 2012-06-05T16:01:15.740 回答
0

您确定它在数据输出时停止,而不是在处理数据时停止吗?撇号在 XML 中具有特殊含义,因此如果它们包含在您的 XML 数据中,您必须将它们替换为实体引用。XML 中有 5 个预定义的实体引用,分别用于小于、大于、与号、撇号和一个引号。或者,您可以将文本标记为 CDATA,以便 XML 解析器不会尝试解析它。

尝试让您的程序将 XML 数据输出到一个文本文件,而不是输出到它现在要去的任何地方。它仍然停在撇号上吗?如果不是,那肯定是因为解析数据有问题。如果即使仅将数据输出到文本文件时您的程序仍然在撇号处停止,则程序中处理该数据的其他地方可能存在问题。检查对包含数据的变量的所有引用,看看你是否能找到程序中断的确切行。

于 2012-06-05T16:19:42.320 回答