そんなとき、原因はApacheのデフォルトエンコーディング設定だったりします。
この設定が有効だと、大体はUTF-8だったり します。
ブラウザは当該Webサーバにアクセスした際、まずApacheが送信してくる 文字コード情報で判定を行おうとします。
ですので、いくらcharsetで文字コードをshift-jisと定義しても UTF-8で表示しようとして、文字化けしてしまうわけです。
こんなときは、apacheがデフォルトエンコーディング情報を送信しないように
設定してあげましょう。
Debianだとこの設定は、
/etc/apache2/conf.d/charset
apacheを再起動「/etc/init.d/apache2 restart」するだけでOKです。