2

データベースからデータを取得して XML 形式で表示する PHP スクリプトを作成しました。何らかの理由で、データ内のアポストロフィに到達すると出力が停止します。これは 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

試してみてくださいstr_replace("'", "\'", $field_to_be_replaced);

'テスト用に、必要に応じて char を空白に置き換えることができます。

于 2012-06-05T16:01:15.740 に答える
0

データの処理時ではなく、データの出力時に停止しますか? アポストロフィは XML で特別な意味を持つため、XML データにアポストロフィが含まれている場合は、エンティティ参照に置き換える必要があります。XML には、小なり、大なり、アンパサンド、アポストロフィ、および引用符用の 5 つの定義済みエンティティ参照があります。または、XML パーサーがテキストを解析しないように、テキストを CDATA としてマークすることもできます。

プログラムが XML データをテキスト ファイルに出力するようにしてください。それはまだアポストロフィで止まっていますか?そうでない場合、それは間違いなくデータの解析に問題があるためです。データをテキスト ファイルにのみ出力している場合でも、アポストロフィでプログラムが停止する場合は、そのデータが処理されるプログラムの別の場所に問題がある可能性があります。データを含む変数へのすべての参照を確認し、プログラムが中断する正確な行を見つけることができるかどうかを確認します。

于 2012-06-05T16:19:42.320 に答える
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 に答える