3

São Tomé and PríncipeMySQL データベースに保存しました。

私のWebページに次のように表示されますS�o Tom� and Pr�ncipe

データベースから直接正しく表示する方法はありますか?

私のMySQLタイプはMyISAMあり、照合はutf8_general_ci

私のウェブページの文字セットは<meta charset="utf-8">

フィールド タイプは に設定されvarchar(30)、フィールドの照合順序はテーブルと同じですutf8_general_ci

PHP 機能テスト

utf8_decode()変換された文字S?o Tom? and Pr?ncipe htmlspecialchars_decode()変換された文字 変換された文字S�o Tom� and Pr�ncipe html_entity_decode()変換されたS�o Tom� and Pr�ncipe quoted_printable_decode()文字S�o Tom� and Pr�ncipe htmlentities()返された空白の結果

@SAEVENのおかげで動作するようになりました

クエリ SELECT の直前にこれを実行しました

mysqli_query($GLOBALS['db_link'], "SET NAMES 'utf8'");

4

1 に答える 1

2

接続レベルで名前空間の照合を指定する必要があるのでしょうか?

基本をカバーしたと思いますが、HTMLマークアップにutf8として文字セットがあります。

データベースクエリを実行する前に、次のSQLステートメントを実行してみてください。

'SET NAMES utf8'

たとえば、PDOを使用している場合

// do your regular connection logic whatever it is
$dbc = new PDO( .... );
$dbc->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);

$dbc->query( 'SET NAMES utf8' );

// run your queries beneath
....

または速記を使用できます

new PDO(
    'mysql:host=mysql.example.com;dbname=awesome_db',
    "username",
    "password",
    array(PDO::MYSQL_ATTR_INIT_COMMAND => "SET NAMES utf8")
);

どのDBALを使用しても、そのクエリは機能します。データをプルする前に、データのプルに使用するのと同じ接続で実行するだけです(一度だけ実行する必要があります)

于 2013-03-22T02:50:11.147 に答える