- ベストアンサー
フォームから入力した文字を変換してひらがなチェックを行う際にエラーが発生する
- フォームから入力した文字を変換する際にエラーが発生し、ひらがなチェックができない問題が発生しています。
- 特定の環境(MAC IE5.0 Fireworksなど)でmb_substr()関数がエラーを引き起こしています。
- PHPのバージョンが4.4.2であることも分かっています。対処方法を教えていただけると助かります。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
> ($sAllowedChars, "SJIS"); この行が宙に浮いてしまっていて、何をしているのか よくわからないのですけれど…。 正しく動いているスクリプトを貼り付けていますか?
その他の回答 (2)
- sakusaker7
- ベストアンサー率62% (800/1280)
mb_strposで第三引数と第四引数を省略されていますが、 内部文字エンコーディングと、実際に使っているエンコーディングとの つじつまは合っているのでしょうか? 警告のメッセージ内容からすると、エンコーディングに絡んだ 問題のような気がするのですが…
お礼
別サーバーに移行して確認するとエラーが解消されました。 PHP.iniのエンコード設定が原因と思います。 エラーを起こしたサーバーのルート権限を持っていない為 確認が出来ませんでしたが、解決しました。 ありがとうございました。
- asuncion
- ベストアンサー率33% (2127/6290)
連想配列$myvalueと$valは別物ですか?それとも、実際は同一ですか? この際ですから、スクリプトの全容をコピー&ペーストしてくださると、 どんなことをなさりたいかが万人に正しく伝わるように思います。
お礼
ありがとうございました。 内部エンコードの不一致が原因でした。 比較部分を if($val["kana_mei"] != ''){ mb_regex_encoding("SJIS"); if (!mb_ereg("^[あ-ん ]+$", $val["kana_mei"])) { $err_msg["kana_mei"] = "※ひらがなでご記入ください。<BR>"; } } と変更することで解決できました。
補足
スクリプトは、以下の通りです。 <?php Session_Start(); require_once( './path.inc'); require_once("./inc/include.inc"); require_once("./view/recruit.inc"); $chk = 0; if($_POST["isPost"]=="1"){ // get value $_SESSION["message_val"] = get_myinput(); //check $err_msg = check_myinput( $_SESSION["message_val"]); if(!$err_msg) { //redirect to confirm page print "<script language='javascript'>document.location.href='recruit_check.php'</script>"; exit; } } display_body($_SESSION["message_val"], $err_msg); function get_myinput() { $myvalue["kana_mei"] = mb_convert_encoding($_POST["kana_mei"], "SJIS"); return $myvalue; } //*****************check form valid******************* function check_myinput($val){ $chk = 0; $tmpmsg=checkinput($val["kana_mei"],"ご氏名(かな)をご記入ください。", 1); if($tmpmsg){ $err_msg["kana_mei"] = "※空欄です。"; } $sStr = $val["kana_mei"]; $sAllowedChars ="あいうえおぁぃぅぇぉかきくけこがぎぐげごさしすせそざじずぜぞたちつってとだぢづでどはひふへほばびぶべぼぱぴぷぺぽまみむめもなにぬねのらりるれろやゆよゃゅょわをんー "; ($sAllowedChars, "SJIS"); If(mb_strlen($sStr) > 0 ) { for ($i=0;$i<mb_strlen($sStr);$i++) { $sStr1= mb_substr($sStr,$i,1); if(!is_integer(mb_strpos($sAllowedChars,$sStr1))) { $err_msg["kana_mei"] = "※ひらがなでご記入ください。"; } } } return $err_msg; ?> 宜しくお願いします。
お礼
ありがとうございました。 内部エンコードの不一致が原因でした。 比較部分のスクリプトを変更することで解決しました。 if($val["kana_mei"] != ''){ mb_regex_encoding("SJIS"); if (!mb_ereg("^[あ-ん ]+$", $val["kana_mei"])) { $err_msg["kana_mei"] = "※ひらがなでご記入ください。<BR>"; } }
補足
余計な文字が入ってしまいました。 御指摘の部分は、コメントアウトしています。 消し忘れていました。 宜しくお願いします。