PHP 停止撇号上的数据输出


PHP halts output of data on apostrophe

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

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

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

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

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

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

撇号 (')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);
...