プロが教えるわが家の防犯対策術!

RSSから取得した文字を、phpからmysqlに投げようとすると、mysqlに格納された時点でエスケープ文字に変換されてしまいます。

具体的には
「暮らし上向く? 予算成立Q&A」 ←この文字列を入れようとすると
「暮らし上向く? 予算成立Q&A」 ←こんな感じでエスケープ文字に変換されてしまいます。

何が問題なのでしょうか?
はてなマークなどが入っていると問題なのでしょうか?

ご回答よろしくおねがいいたします。

質問者からの補足コメント

  • >>RSSから受け取った時点で最初から「&#・・・・」という文字だった可能性があります。
    これは既に検証しましたが違いました・・(受け取った変数をecho関数で出力しましたが正常でした)

    No.1の回答に寄せられた補足コメントです。 補足日時:2015/04/10 19:27
  • ご指摘の通りソースの方がHTMLエンティティになっていました。

    こういう場合は毎回、rssから受け取った時点で「htmlspecialchars_decode」のような関数でデコード処理をかけるのが普通なのでしょうか?

    「文字列が勝手にエスケープ文字に変換される」の補足画像2
    No.2の回答に寄せられた補足コメントです。 補足日時:2015/04/11 06:00

A 回答 (3件)

>mysqlに格納された時点でエスケープ文字



まず考えられるのはRSSから受け取った時点で最初から「&#・・・・」という
文字だった可能性があります。
もう一つはmysqlに投入する際になんらかのエンコード処理をいれているかもしれません。

実際に、以下のようにやると、指定の文字が変換されるのがわかります。
<?PHP
$str="暮らし上向く? 予算成立Q&A";
$str=htmlspecialchars($str);
$str=mb_convert_encoding($str,"HTML-ENTITIES","utf8");
$str=htmlspecialchars($str);
//ホントは最後の変換はいらないけどエスケープ状態で表示したいのであえて変換。
print $str;
?>

具体的にどのようにmysqlに投入し、投入したデータをどのように取り出して
表示したのか検証が必要です。
この回答への補足あり
    • good
    • 0

>受け取った変数をecho関数で出力しましたが正常でした



いや、echoした画面をさらにブラウザからソースを確認してみてください
この回答への補足あり
    • good
    • 0

DBの検索性を考えると、通常文字の方がヒットさせやすいでしょうね


逆にその文字列を検索の対象にしないのであれば、
どちらでもいいのでは?

今回の例だと「&amp;」を「&」に変換するかどうかにもよります。
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!