PHP暂停撇号上的数据输出

时间:2012-06-05 15:57:04

标签: php mysql

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

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

3 个答案:

答案 0 :(得分:0)

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

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

答案 1 :(得分:0)

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

检查here以了解这些字符并构建更完整的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);
...

答案 2 :(得分:0)

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

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