2

こんにちは、mysqlデータベースにその一部を追加する目的で、cmdで実行されているphpスクリプトで「ISO-8859-7」をエンコードするサイトからギリシャ語で書かれた文字列を読んでいます。問題は、データベースに何かを追加する前にエコーし、エンコーディングの問題があるように見えることです。コードの関連部分を添付しています。

$fil1=hitFormGet("http://www.topsites.gr/gr_domain_list/".$site->href);
$fil1=iconv("ISO-8859-7","UTF-8",$fil1);
$html1=str_get_html($fil1);
$data=$html1->find('td class="res3" table tbody table tbody tr');
echo "ttl".$data[4]->plaintext."\n";

出力は ttl Φιλοξενεί サイト: Îαί

(ここも違うようです…)

4

1 に答える 1

3

PHP と MySQL を扱うときは常に UTF-8 を使用してください。接続方法は次のとおりです。

$DB_USERNAME = '';
$DB_PASSWORD = '';
$DB_HOST = '';
$DB_NAME = '';

$pdo_attributes = array();
$pdo_attributes[PDO::ATTR_EMULATE_PREPARES] = FALSE;

$dsn = sprintf('mysql:dbname=%s;host=%s;charset=utf8', $DB_NAME, $DB_HOST);
$pdo = new PDO($dsn, $DB_USERNAME, $DB_PASSWORD, $pdo_attributes);

さらに、PHP < 5.3.6 では、次の追加属性を設定します。

$pdo_attributes[1002] = 'SET NAMES utf8';

整数1002は PDO::MYSQL_ATTR_INIT_COMMAND を表しますが、このコマンドは PHP < 5.3.1 では壊れています。

この回答の元の内容は、現在は古くなっています。これは、推奨されなくなった古いmysql_*関数を使用して接続する方法であり、当時必要だった他の意味不明なヒントを使用しています。

mysql_connect ("localhost", "DB_USER", "DB_PASSWORD") or die (mysql_error());
mysql_select_db ("DATABASE_NAME") or die (mysql_error());

mysql_query("SET character_set_client=utf8"); 
mysql_query("SET character_set_connection=utf8"); 
mysql_query("SET character_set_database=utf8"); 
mysql_query("SET character_set_results=utf8"); 
mysql_query("SET character_set_server=utf8"); 
mysql_query("SET NAMES 'utf8'");
于 2012-04-19T03:16:39.063 に答える