2011-02-09 9 views
3

"ええと、私はこれが奇妙なことではないと思っています。"これを修正するPHP関数はありますか?

どうすればこのエンコーディングを修正できますか?

+2

それはどこから来たのか、それが何であるかによって異なります。一般的に、いったん本物のモチベア(http://en.wikipedia.org/wiki/Mojibake)を持ってしまえば、それを魔法のように修正することはできません。途中で正しくエンコーディングを処理していない場合は、適切な場所でコードを修正して、最初にモジバケになるのを防ぐことができます。 – deceze

+2

問題をより詳しく説明できますか? – yuxhuang

答えて

4

は何あなたに実行していることの結果

あなたは、ケースのほとんどで、それはお勧めしますUTF8文字列のうちをエンコードするためにPHPを設定することもできますし、また、あなたのHTMLページ内のContent-Typeのタグを持っている必要があります データは1つのエンコーディングで記​​述され、別のエンコーディングとして解釈されます。あなたは入力が同じフォーマットであることを要求していることを確認する必要があります。マルチバイト文字を避ける必要がないかぎり、UTF-8を使用することをお勧めしますあなたはASCIIを強制的に見たいかもしれません。

あなたは内部でUTF-8を使用するためにPHPを言っていることを確認してください:

ini_set('default_charset', 'UTF-8'); 

そして、あなたは両方のヘッダーにUTF-8でエンコードされたテキストを、期待してブラウザを言っていることを確認してください...

header("Content-Type:text/html; charset=UTF-8"); 

...と(HTML5下)あなたのメタタグ内 ...

<meta charset="utf-8"> 

これを設定すると、送信されるまで、ブラウザを教えてくれますUTF-8でエンコードされたコンテンツをフォームに送信すると、UTF-8として返信した結果が解釈されます。

また、データベースストレージと接続エンコーディングの両方がUTF-8であることも確認する必要があります。通常、単なるデータストアでない限り(つまり、データを操作したり解釈したりすることはありませんが)問題ではありませんが、後で問題を起こすよりも大丈夫です。

+0

あなたのデータベースがUTF-8であることを確認するために+1 – Summer

1

は、このスレッドを参照してください:PHP: regular expression to remove `â` or `â€`?

+3

私はむしろ正規表現を使用するのではなく、すべてのエンコーディングの問題を全体的に修正できるものを使用します。 – Webnet

1

PHPの設定は何ですか?

3

iconv関数は、一般に、この種のエンコーディングの問題に対処することができます。

+1

'iconv'が助けになりますが、あるエンコーディングから別のエンコーディングに変換する必要があることがわかっている場合のみです。 Webnetは、彼または彼女が何を変換したいかを知るために十分に精通しているようには思えません。 – coreyward

0

また、データベースのテーブルにデータを保存する場合は、テーブルとカラム(データベース自体も)にutf8_general_ciを設定して、マルチバイト文字を処理できるようにする必要があります。

クエリを実行する前に、このクエリの名前を「utf8」に設定します。

+0

照合(utf8_general_ciまたはutf8_unicode_ciのような)は、発注以外の事項には関係ありません。 MySQLは "utf8"に設定する必要があるので、おそらく "CHARACTER SET"を意味します。 – coreyward

+0

nice ..それを明確にしてくれてありがとう – r2b2

+0

この回答とコメントを見つけた....実際には 'utf8mb4_unicode_ci'を使うべきです!! mysqlのutf8は3バイトまでしかサポートしていません... utf8mb4は全4バイトをサポートしています。一般的な照合もやや壊れていて、Unicode照合は仕様に従います。 –

0

右溶液を(文字列$ STR、文字列$ to_encoding [、混合の$ from_encoding])をmb_convert_encoding mb_convert_encoding()

ストリング

は、任意from_encodingからto_encodingする文字列strの文字エンコーディングを変換するように見えます。

関連する問題