私は1つのテーブルと1つのテーブルを持ち、特定のフィールドにはさまざまな衣服の説明があります。これらの記述には、ウムラウトまたは類似の文字が含まれることがよくあります。utf8アクセントの表示が一貫していません
私はこのフィールドを2つの異なるphpフィールドから取得していますが、私はデータに何もしていませんが、一貫して表示されません。 FILE1で
私はFILE1に上記の1を追加した場合、それは以下のように正しく表示、または
$con->query("SET NAMES 'utf8'");
と
header("Content-Type: text/html; charset=utf-8");
を追加しますが、データが正しく表示されません。
FILE2では、それだけで
$con->query("SET NAMES 'utf8'");
が設定され、正しく表示されます。
セット名のクエリで労働組合のいずれかで
header("Content-Type: text/html; charset=utf-8");
の追加、またはセット名のクエリーを残して、それが正しく表示されない原因となります。
$con->set_charset("utf8");
はいずれの点でも違いはないようです。
この問題は、WindowsおよびLinux上のInternet ExplorerおよびFirefox上に存在します。
一貫性表示データの例:
ED HARDY SCHUHE IM JAPAN-STYLE, GRÖßE 36
ファイル1:
<?php
header("Content-Type: text/html; charset=utf-8");
if (isset($_GET["pk"])) {
$pk = $_GET["pk"];
}
$con = mysqli_connect("localhost","user","password", "database");
if (!$con) {
echo "Can't connect to MySQL Server. Errorcode: %s\n". mysqli_connect_error();
exit;
}
$con->query("SET NAMES 'utf8'");
$retreiveQuery = 'SELECT ARTICLE_NAME FROM AUCTIONS WHERE ARTICLE_NO = ?';
if ($getRecords = $con->prepare($retreiveQuery)) {
$getRecords->bind_param("s", $pk);
$getRecords->execute();
$getRecords->bind_result($ARTICLE_NAME);
while ($getRecords->fetch()) {
echo "<h1>".$ARTICLE_NAME."</h1>";
}
} else {
print_r($con->error);
}
ファイル2:
<?php
header("Content-Type: text/html; charset=utf-8");
if (isset($_GET["brand"])) {
$brand = $_GET["brand"];
}
$con = mysqli_connect("localhost","user","pass", "database");
if (!$con) {
echo "Can't connect to MySQL Server. Errorcode: %s\n". mysqli_connect_error();
exit;
}
$con->query("SET NAMES 'utf8'");
$brand = '%' . $brand . '%';
$rows = getRowsByArticleSearch($brand);
echo "<table border='0' width='100%'><tr>" . "\n";
foreach ($rows as $row) {
$pk = $row['ARTICLE_NO'];
echo '<tr id="article_' . $pk . '">' . "\n";
echo '<td><a href="#" onclick="updateByPk(\'Layer2\', \'' . $pk . '\', \'' . $title . '\', \'' . $pg . '\')">'.$row['ARTICLE_NAME'].'</a></td>' . "\n";
echo '</tr>' . "\n";
}
echo "</table>\n";
function getRowsByArticleSearch($searchString) {
$con = mysqli_connect("localhost","user","pass", "db");
$recordsQuery = "SELECT ARTICLE_NAME FROM AUCTIONS WHERE lower(ARTICLE_NAME) LIKE ? and SUBCAT='' LIMIT 0,20";
if ($getRecords = $con->prepare($recordsQuery)) {
$getRecords->bind_param("s", $searchString);
$getRecords->execute();
$getRecords->bind_result($ARTICLE_NAME);
$rows = array();
while ($getRecords->fetch()) {
$row = array(
'ARTICLE_NAME' => $ARTICLE_NAME,
);
$rows[] = $row;
}
return $rows;
} else {
print_r($con->error);
}
}
私は、index.phpを用いて、AJAX applicaitionを有します私が設定したもの
header("Content-Type: text/html; charset=utf-8");
次に、file2を使用してajax経由でコンテンツを含むレイヤーをロードします。これにより、データが正しく表示されません。データはfile1を使用して別のレイヤーにデータをロードするリンクになり、データが正しく表示されます。
矛盾がどこから来ているのか分かりません。
編集:
データは、設定された名前と設定ヘッダを持つファイル1で正しく表示され、ページがUTF-8として示しています。
ファイル2は、Webページ情報がISO-8859-1であることを示すときにのみデータを正しく表示します。これは、セット名を省略してヘッダーを設定することを意味します。
(私の推測では、file2.phpまたはindex.phpのは、他のエンコーディングで保存されているだろう)!ここで確認してください:http://stackoverflow.com/questions/346531/utf8-problem-with-mysql-5/346552#346552 – markus