2012-04-09 20 views
1

ここでは、テキストボックスに入力したデータをフォームに入力します。テキストボックス名:quiz_optionAはフレンチ文字をphpの文字列に変換します

value = ÉÉÉabcd. 

私は私が使用した方法下記

$this->_data = JRequest::get('post'); 
$string = $this->_data['quiz_optionA']; 

は英語

$normalizeChars = array(
'Š'=>'S', 'š'=>'s', 'Ð'=>'Dj','Ž'=>'Z', 'ž'=>'z', 'À'=>'A', 'Á'=>'A', 'Â'=>'A',  'Ã'=>'A', 'Ä'=>'A', 
'Å'=>'A', 'Æ'=>'A', 'Ç'=>'C', 'È'=>'E', 'É'=>'E', 'Ê'=>'E', 'Ë'=>'E', 'Ì'=>'I', 'Í'=>'I', 'Î'=>'I', 
'Ï'=>'I', 'Ñ'=>'N', 'Ò'=>'O', 'Ó'=>'O', 'Ô'=>'O', 'Õ'=>'O', 'Ö'=>'O', 'Ø'=>'O', 'Ù'=>'U', 'Ú'=>'U', 
'Û'=>'U', 'Ü'=>'U', 'Ý'=>'Y', 'Þ'=>'B', 'ß'=>'Ss','à'=>'a', 'á'=>'a', 'â'=>'a', 'ã'=>'a', 'ä'=>'a', 
'å'=>'a', 'æ'=>'a', 'ç'=>'c', 'è'=>'e', 'é'=>'e', 'ê'=>'e', 'ë'=>'e', 'ì'=>'i', 'í'=>'i', 'î'=>'i', 
'ï'=>'i', 'ð'=>'o', 'ñ'=>'n', 'ò'=>'o', 'ó'=>'o', 'ô'=>'o', 'õ'=>'o', 'ö'=>'o', 'ø'=>'o', 'ù'=>'u', 
'ú'=>'u', 'û'=>'u', 'ý'=>'y', 'ý'=>'y', 'þ'=>'b', 'ÿ'=>'y', 'ƒ'=>'f' 
); 


echo strtr($string, $normalizeChars);die; 

出力にフランスの変換下記の方法で、私のPHP関数からデータを取得:

A�A�A�abcd 

Normal en glishアルファベットは文字列に変換されます。しかし、フランス語の文字は文字列として変換されませんでした。

出力はEEEabcdである必要があります。これを手伝ってもらえますか?

<meta http-equiv="Content-Type" content="text/html; charset=utf-8"> 

をし、$ normalizeCharsが含まれているあなたの.phpファイルはUTF8エンコードを持っていることを確認してください。

+0

PHPファイルは、ブラウザで表示されるのと同じエンコードで保存されていますか?エンコーディングを指定するヘッダーがありますか? – Jon

+0

マルチバイト文字列関数を使用する必要があります http://stackoverflow.com/questions/9986584/dealing-with-non-ascii-string-as-array-and-character – max

+0

私のエディタは "cp1252"文字エンコーディングで作業しました。それは私を示す "いくつかの文字は、" cp1252 "文字エンコーディングを使用してマッピングすることはできません。エンコーディングを変更するか、" cp1252 "文字エンコーディングでサポートされていない文字を削除してください..私がutf8として保存した場合、 phpの徹底的なコーディングでutf8形式の文字を変換する方法? – ram

答えて

0

今日、私はsimilar question に回答されているので、このようなHTMLコードを使用するようにしてください。

0

あなたのライン

echo strtr($string, $normalizeChars); 

だけあなたが$normalizeCharsで指定した文字を変換します。 É(注:質問にはその文字のエンコードは定義されていません)、翻訳情報は$normalizeCharsにありません。

これらの文字も同様に変換する場合は、$normalizeCharsアレイに追加する必要があります。 Éが実際にはA�であるようです(hexdumpを追加すると、これが何であるかをよりよく表すことができます)。

私は次のことを前提としたい:

ブラウザがUTF-8エンコーディングでアプリケーションへの入力を送信します。これらをシングルバイトエンコーディング(非utf-8)で処理するため、変更されません。

編集:"\xC3\x89"

É; cp1252 #201; LATIN CAPITAL LETTER E WITH ACUTE; U+00C9 

UTF-8 PHPの文字列の中にエンコードされています。ほぼすべての文字をUTF-8にエンコードするには、まずエンコーディングで文字を見つける必要があり、Unicodeのコードポイントです。あなたの例では:

Character: É 
Codepoint: LATIN CAPITAL LETTER E WITH ACUTE (U+00C9) 

コードポイントは、小さなPHP関数をUTF-8に変換することができます:進出力が文字列で記述することができ

echo bin2hex(unicodeCodePointToUTF8(0x00C9)), "\n"; # c389 

/** 
* @see Unicode 6.0.0 Ch2 General Structure, rfc3629 
* @param int|string $codepoint e.g. 0xC9/"U+00C9" 
* @return string 
*/ 
function unicodeCodePointToUTF8($codepoint) 
{ 
    is_string($codepoint) && sscanf($codepoint, 'U+%x', $codepoint); 
    if ($codepoint < 0) { 
     throw new InvalidArgumentException('Lower than 0x00.'); 
    } 
    if ($codepoint > 0x10FFFD) { 
     throw new InvalidArgumentException('Larger than 0x10FFFD.'); 
    } 
    if (0xD800 <= $codepoint && $codepoint <= 0xDFFF) { 
     throw new InvalidArgumentException(sprintf('High and low surrogate halves are invalid unicode codepoints (U+D800 through U+DFFF, is U+%04X).', $codepoint)); 
    } 
    if ($codepoint <= 0x7F) { 
     return chr($codepoint); 
    } 
    if ($codepoint <= 0x7FF) { 
     return chr(0xC0 | $codepoint >> 6 & 0x1F) . chr(0x80 | $codepoint & 0x3F); 
    } 
    if ($codepoint <= 0xFFFF) { 
     return chr(0xE0 | $codepoint >> 12 & 0xF) . chr(0x80 | $codepoint >> 6 & 0x3F) . chr(0x80 | $codepoint & 0x3F); 
    } 
    return chr(0xF0 | $codepoint >> 18 & 0x7) . chr(0x80 | $codepoint >> 12 & 0x3F) . chr(0x80 | $codepoint >> 6 & 0x3F) . chr(0x80 | $codepoint & 0x3F); 
} 

使い方double型の文字列に接頭辞「\x」をつけてPHPで書いてください:

$binary = "\xC3\x89"; 

このような書き方は、実際のP​​HPファイルのエンコーディングの影響を受けません。

+0

私のエディタは "cp1252"文字エンコーディングで動作しました。 "いくつかの文字は" cp1252 "文字エンコーディングを使ってマッピングできません。エンコーディングを変更するか、" cp1252 "文字エンコーディングでサポートされていない文字を削除してください。私はutf8として保存され、それはよく働いた.PDFのutf8形式として文字を変換する他の方法は完全なコーディング? – ram

+0

@ram:答えを広げました。有効なUTF-8があるかどうかを確認するために、私は次の質問にリンクしています:[速い方法でブラウザに表示できないすべての文字をutf8文字列から取り除く](http://stackoverflow.com/a/7635283/367456)これが必要です)。 – hakre

関連する問題