下記の質問を経て、MAMP環境では、mb_convert_kanaを使った変換が正しく動作したのですが、
https://teratail.com/questions/82333
実際のサーバにアップし、windowsで動作確認したところ、入力画面で半角カナ入力すると、確認画面で文字化けしてしまいました。
mb_convert_kanaの記述を加える前は、当たり前ですが、半角カナを入力すると該当箇所は「??」で表示されていましたが、当該コードを加えたら、別の化け方になりました。
文字コード周り(記述場所、指定方法)が原因なのかとも考えましたが、見当がつかなくなってしまいました。
何かしらご指摘いただけると助かります。
php
1<?php 2 3//変数の初期化 4$page_flag = 0; 5$clean = array(); 6$error = array(); 7 8// サニタイズ 9if( !empty($_POST) ) { 10 11 foreach( $_POST as $key => $value ) { 12 $clean[$key] = htmlspecialchars( $value, ENT_QUOTES); 13 } 14} 15 16if( !empty($_POST['btn_confirm']) ) { 17 18 //半角・全角の変換 19 //この1行を加えました 20 $clean['toiawase'] = mb_convert_kana($clean['toiawase'],"SKV"); 21 22 23 $error = validation($clean); 24 25 if( empty($error) ) { 26 $page_flag = 1; 27 } 28 29} elseif( !empty($_POST['btn_submit']) ) { 30 31 $page_flag = 2; 32 //変数とタイムゾーンを初期化(省略) 33 34 //言語と文字コードの使用宣言 35 mb_language("ja"); 36 mb_internal_encoding("UTF-8"); 37 38 //メールの設定各種(省略) 39} 40function validation($data) { 41 42 $error = array(); 43 44 // バリデーション 45 if( empty($data['toiawase']) ) { 46 $error[] = "「お問合せ」は必ず入力してください。"; 47 }elseif( 400 < mb_strlen($data['toiawase']) ) { 48 $error[] = "「お問合せ」は400文字以内で入力してください。"; 49 } 50 return $error; 51} 52?> 53<!DOCTYPE html> 54<html lang="ja"> 55<head> 56 <!-- head省略 --> 57</head> 58<body> 59 <!-- html省略 --> 60<?php if( $page_flag === 1 ): ?> 61 62 <form method="post" action=""> 63 <dl class="form"> 64 <dt>お問合せ内容 <span class="red">※</span></dt> 65 <dd><?php echo nl2br($clean['toiawase']); ?></dd> 66 </dl> 67 <div> 68 <input type="submit" name="btn_back" value="戻る" class="btn_gr"> 69 <input type="submit" name="btn_submit" value="送信" class="btn_bl"> 70 <input type ="hidden" name="toiawase" value="<?php echo $clean['toiawase']; ?>"> 71 </div> 72</form> 73 74<?php elseif( $page_flag === 2 ): ?> 75 <!-- 送信完了画面の記述 --> 76 77<?php else: ?> 78 <form method="post" action=""> 79 <dl class="form"> 80 <dt>お問合せ内容 <span class="red">※</span></dt> 81 <dd><textarea name="toiawase" rows="5"><?php if( !empty($clean['toiawase']) ){ echo $clean['toiawase']; } ?></textarea></dd> 82 </dl> 83 <div> 84 <input type="submit" name="btn_confirm" value="入力内容を確認する" class="btn_bl"> 85 </div> 86 </form> 87 <?php endif; ?> 88 89</body> 90</html>
回答2件
あなたの回答
tips
プレビュー