• ベストアンサー

変数の内容が突然変化するのはなぜでしょう?

メールからきりだしたデータで $From="あいうえお" という変数に $From=str_replace("<","[",$From);//誤動作コード置換え という処理をしたら $From="あいうえお[****@i.softbank.jp>" という風にかわってしまいます。 なぜでしょう?

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

  • ベストアンサー
  • duron
  • ベストアンサー率77% (73/94)
回答No.2

<?php $from="ああああ <test@test.test>"; print($from); ?> コレを実際に動かしてみてください。 ブラウザには「ああああ」とでると思います。 ソースを開いてみてください。 「ああああ <test@test.test>」となってると思います。 ブラウザが<test@test.test>はタグだと思って表示してないのでしょう。 回答番号:No.1さんへの回答でコードをかかれてますけど たぶんそのままで動かしてないですよね? 「$From="あいうえ"」のあとにセミコロンないですし。 切り出したデータで動かしたのではないでしょうか? で、$fromが置換された際に<が[に変わったのでタグとみなされなくなり ブラウザじょうで出力された、ということだと思います。

seventozero
質問者

お礼

その通りでした、ありがとうございます。

その他の回答 (2)

  • yambejp
  • ベストアンサー率51% (3827/7415)
回答No.3

#2さんの言うとおりそうですね。 ブラウザ上でデータを確認する場合はhtmlspecialchars()しないといけません。 <?php $from="ああああ <test@test.test>"; echo "(1)".htmlspecialchars($from),"<br>\n"; $from=str_replace("<","[",$from); echo "(2)".htmlspecialchars($from),"<br>\n"; ?>

seventozero
質問者

お礼

勉強になりました、ありがとうございます。

  • yambejp
  • ベストアンサー率51% (3827/7415)
回答No.1

どこかでそういう処理が入っているからでしょうね。 今見た範囲にはそのような処理はありません

seventozero
質問者

お礼

回答頂きありがとうございます。 そう思って下記のようなデバックでチェックしたのですが・・ $ID="123"; $Date="1019"; $From="あいうえ" $datavalue="[id]".$ID."[date]".$Date."[from]".$From; echo "(1)".$datavalue; $datavalue=str_replace("\n","",$datavalue);//改行コード削除 $datavalue=str_replace("<","[",$datavalue);//誤動作コード置換え //$datavalue=str_replace(">",">",$datavalue);//誤動作コード置換え echo "<br>"; echo "(2)".$datavalue; 結果 (1)[id]123[date]1019[from]あいうえ (2)[id]123[date]1019[from]あいうえ[****@i.softbank.jp> となるのです。何か考えられる原因はありますか?

関連するQ&A