2011-12-29 5 views
2

私は元のテキストがferhat göçerで、ferhat göçerのように表示したいと思います。私はたくさんのことを試しましたが、どれもうまくいきません。PHPでUTF-8文字列から正しい文字を表示するにはどうすればよいですか?

すべてのページには、次のヘッダーとメタを持っている:

header('content-type: text/html; charset=utf-8'); 
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"> 

私はiconvutf8_decondeおよび機能の他のすべての束と、まだ運を試してみました。

これらの奇妙な文字の正しいシンボルを表示するにはどうすればよいですか?私はこのデータをデータベースに持っています。

+1

おそらく問題は、データベースにある:エンコード中ですあなたのデータベースはutf-8として設定されていますか? – Adonais

+1

まず、ブラウザにページを読み込んでから、ブラウザがエンコーディングと判断した内容を確認します。これをあなたの質問の補遺として投稿してください。 –

+0

'ferhatgöer'は、utf-8でエンコードされた' ferhatgöçer'をlatin-1からutf-8に変換すると得られます。たぶん、ある時点で、テキストがlatin-1でエンコードされていると間違って推測されていました。それで 'iconv -f UTF-8 -t LATIN1'はあなたに正しいutf-8を与えます。 –

答えて

1

utf8_decodeなどの文字列の内容は、通常UTF-8で2回エンコードされたものなので:

var_dump(utf8_decode('ferhat göçer')); 

は(。see example)しかし、これは次のことを前提としています

  1. あなたのファイルはUTF-8形式で保存されていること。
  2. ヘッダーが正しく配信されていること。 (ブラウザのHTML/HTTPヘッダーを確認してください)
  3. PHPの内部エンコーディング/デフォルトの文字セットがUTF-8に設定されていることを確認してください。

はまた、データベースへの挿入/更新する前に、次のように再発生問題を回避することを念頭に置いてクマ:

mysql_query("SET NAMES 'utf8'"); 
1

サーバー関連の可能性もあります。いくつかのプロバイダは、あなたがPHP経由で設定したものか、ページの<header>に関係なく、ISO-XXXXエンコーディングを強制するようにapache2を設定しています。

編集:これを確認するには、pageloadが提供する実際のヘッダーを調べます。 ChromeのInspect - > Networkパネルのようなブラウザツール、Firebug、またはhttp://www.webconfs.com/http-header-check.php

関連する問題