シングルクォーテーション(')が犯人でした(PHP5 addslashes関数)

| コメント(0) | トラックバック(0)

4月1日におそえワールドのトップにブログの新着が出なくなった・・・という記事を書きましたが、原因が分かって解決出来ました。

原因は、3月29日の「DragonForce in CLUB CITTA'」と3月30日の「ALL THAT REMAINS in CLUB CITTA'」の記事のタイトルに使ったシングルクォーテーションが犯人でした。

おそえワールドのトップページでは、このブログの新着情報を出力しているAtom を PHP5 で処理して JavaScript に読み込ませて HTML に表示しています。

そして、「 CLUB CITTA' 」 は最後にシングルクォーテーションが付きます。

しかし、プログラムなどでは、このシングルクォーテーションやダブルクォーテーションは「鬼門」なのを忘れてました。
しかも、先日、仕事でもぶち当たったんですよね~。

さて、Firefox3.0のアドオンであるFirebugで調べるとエラー表示が出ます。

php5-addslashes-01.png

記事のタイトルからシングルクォーテーションを削除すれば解決なのですが、それだと癪だし、今後も同様のことが無いとは言い切れません。

根本的に解決するためには、シングルクォーテーションなどの特殊な文字列をエスケープ処理する必要があります。

しかし、シングルクォーテーションをキーワードにネットで普通に検索しても、バックスラッシュ(\)をシングルクォーテーションの直前に手動で入れる話しか出てきません。

でも、色々探していると、addslashes関数というのを発見。

両サイトのオーナー様、ありがとうございます。

これで解決の糸口が見えてきました。

最終的に下記のように解決させました。(改修前のコードと改修後のコードです)

■(改修前) 元々の、Atomを読み込ませるPHP

<?php

$atom = simplexml_load_file("https://blog.osoe.jp/atom.xml");
foreach($atom->{'entry'} as $item){
$attr = $item->{'link'}->attributes();
$link = $attr['href'];
$title = $item->title;
$pt = $item ->published;
$pt = date("Y.m.d", strtotime($pt,+9000));

echo "<dt>$pt</dt><dd><a href=\"$link\">$title</a></dd>\n";

}

?>

 

■(改修後) addslashes関数を使って書いたAtomを読み込ませるPHP

<?php

$atom = simplexml_load_file("https://blog.osoe.jp/atom.xml");
foreach($atom->{'entry'} as $item){
$attr = $item->{'link'}->attributes();
$link = $attr['href'];
$title = addslashes($item->title);
$pt = $item ->published;
$pt = date("Y.m.d", strtotime($pt,+9000));

echo "<dt>$pt</dt><dd><a href=\"$link\">$title</a></dd>\n";

}

?>

 

これで、正常に表示されるようになり、エラーも出なくなりました。

php5-addslashes-02.png

これで、次の文字を正常に処理出来るようになった、ハズです。

  • シングルクォーテーション
  • ダブルクォーテーション
  • バックスラッシュ
  • NULL

 

【今回、参考にさせて頂いたサイト】

トラックバック(0)

トラックバックURL: https://osoe.jp/mt/mt-tb.cgi/1073

>コメントする

おそえワールド検索

Powered by Movable Type 4.261