phpの場合、その挙動の殆どはphp.iniで制御可能ですが(勿論、全てのレンタルサーバがphp.iniの編集を許しているわけではありません。)
以下の記事は、php.iniの編集が可能で、文字コードがShift-JISの場合の対策の一つです。
スクリプトとデータベースの文字コードが全てShif-JISの場合でも、「@」、「」と云った文字が「?」と化けることがあります。
php.iniはうっかり書き換えると、挙動が全く変わってしまう場合がありますので、あまりやたらといじらないことをお勧めします。
また、編集する前には、以前の常態に戻せるようにバックアップを取っておくことをお勧めします。
phpを使って、POSTやGETで文字の送信を行った場合に、「@」、「」が「?」となってしまうことがあります。
対策(この対策が絶対ではありません)
mbstring.http_input = auto になっている場合
↓
mbstring.http_input = pass (文字エンコーディングを自動では行わない)
同じようにoutputも変更
mbstring.http_output = auto になっている場合
↓
mbstring.http_output = pass
で改善される場合があります。
尚、mbstring.http_input = auto の場合は、mbstring.detect_order なども絡んで来ますのでここでは省きます。
PHPにしてもMySqlにしても、このようなマルチバイト環境は文字化けの元ですので、出来るだけスクリプト側で処理を行い、PHP側では何もやらない方が、問題が少ないように思います。
少なくても、悪さはすれど恩恵を感じたことは無いです