2012-07-26 13 views
9

私はPHPウェブアプリケーションを構築しており、UTF-8で動作します。データベースはUTF-8で、ページはUTF-8として提供され、UTF-8にメタタグを使用して文字セットを設定します。もちろん、Internet Explorerを使用していて、Microsoft Officeから貼り付ける&のコピーを使用していると、私は何とかUTF-8を入力しないことがあります。ユーザ入力をUTF-8に変換する最良の方法

HTTP 400 Bad Requestエラーを投げるのが理想的な解決策ですが、明らかにできません。次善策は$_GET,$_POST$_REQUESTをUTF-8に変換することです。とにかく入力をエンコードする文字が何であるか確認するために、iconvに渡すことができますか?そうでない場合、これを行うための最良の解決策は何ですか?

答えて

8

チェックアウトmb_detect_encoding()例:あなたは、文字列がISO-8859-1として入力されることを保証utf8_encode()場合もあります

$utf8 = iconv(mb_detect_encoding($input), 'UTF-8', $input); 

+0

明らかに文字列がISO-8859-1であることは保証できませんが、 'mb_detect_encoding()'は良好に見えます –

0

場合によっては、utf8_encodeだけを使用するか、一般的なチェックはOKですが、文字列内の一部の文字が失われることがあります。さまざまなタイプ(この例はウィンドウ)に基づいて基本的な配列/文字列リストを構築することができれば、かなり多くをサルベージすることができます。

if(!mb_detect_encoding($fileContents, "UTF-8", true)){ 
    $checkArr = array("windows-1252", "windows-1251"); 
    $encodeString = ''; 
    foreach($checkArr as $encode){ 
     if(mb_check_encoding($fileContents, $encode)){ 
      $encodeString .= $encode.","; 
     } 
    } 
    $encodeString = substr($encodeString, 0, -1); 
    $fileContents = mb_convert_encoding($fileContents, "UTF-8", $encodeString); 
} 
関連する問題