この対策はご存知ありませんでしょうか?
シフトJISで半角カナ"アア"とさせると、その文字は、EUC文字コードと見ても意味のある2バイトコードになります。なので、文字列の文字コードを自動判定させると、優先の文字コードが何か次第で誤った文字コード選択がされる場合があります。
処理の前後や、mb_stringモジュールの変数設定、PHPプログラムファイル自体の文字コード等など、色々絡む要素はありますが。
mb_internal_encoding()を使って、明示的に内部文字コードをシフトJISに設定するのはどうでしょう。
http://2php.jp/php/mb_convert_kana.html
PHP-user MLでの質問
http://ns1.php.gr.jp/pipermail/php-users/2003-September/018600.h...
とその回答
http://ns1.php.gr.jp/pipermail/php-users/2003-September/018604.h...
これらのページが参考になるかと思います。
変換時ではなく、表示する際に文字化けが発生している可能性もあります。
その場合には出力する際に、
header ("Content-Type: text/html; charset=Shift_JIS");
とHTTPヘッダを送出してやると直るはずです。
またHTML内で表示している場合には、HTMLの<head>要素内でも
<meta http-equiv="content-type" content="text/html; charset=Shift_JIS" />
と指定してやると上手くいくと思います。
その他、PHP内でマルチバイトに対応していない関数で$q1を変換等をしていないか確認してみてください。
どの方法も上手くいきませんでした。
確認したところ、一部の半角カタカナは、$_POSTから取得した瞬間に文字化けしているようです。。。