• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:htmlspecialcharsの文字化け(?))

htmlspecialcharsの文字化けについて

このQ&Aのポイント
  • 現在PHP勉強中で、フォームの内容をCSVに保存し、情報をメールで送信する際に、htmlspecialcharsを使用してタグを無効化しました。しかし、変換後の文字列に不要なバックスラッシュが付加されてしまい困っています。
  • 過去にエンコード設定がSJISだった時、文字列がバックスラッシュを含む形で表示されたことがありましたが、今回はEUCを使用しており、その原因ではないと考えています。
  • フォームに入力された文字列が正しく変換されずに表示される現象について、どのように対処すればよいか、助言をいただけると助かります。

質問者が選んだベストアンサー

  • ベストアンサー
  • kirin_f
  • ベストアンサー率51% (44/85)
回答No.1

<? echo htmlentities(stripslashes($m_name,ENT_NOQUOTES)); ?> とすれば、\が取れます。 これは、magic quoteといって、外部からの来たデータの中の 「'」「"」「\」の文字の前に自動的に「\」を付加されます。 データベースに使用するSQL文を作らせる際に、上記の文字が ひっかかってしまうので、自動的に\を入れてエスケープさせるためです。 ただ、データベースを使用しないならmagic quoteは、じゃまなだけだと 思うので、phpの設定でmagic_quotes_gpcをOFFにすれば、\は付加されなく なります。

rimuse
質問者

お礼

<? echo htmlentities(stripslashes($m_name)); ?> でいけました! <? echo htmlentities(stripslashes($m_name,ENT_NOQUOTES)); ?> だったからエラーが出たんですね。 本当にありがとうございます。

rimuse
質問者

補足

ご回答ありがとうございます。 一箇所間違えていました。 <? echo htmlentities($m_name,ENT_NOQUOTES); ?> ではなく、 <? echo htmlspecialchars($m_name,ENT_NOQUOTES); ?> でした。 試しに教えていただいた方法でやってみたのですが、 Warning: Wrong parameter count for stripslashes() in 「エラー箇所」 というように出てしまいます。フォームで渡された値に何か問題があるのでしょうか?

関連するQ&A