противоречивое отображение акцентов utf8 - PullRequest
0 голосов
/ 21 апреля 2009

У меня есть одна база данных, с одной таблицей, с определенным полем, в котором есть описания различной одежды. Эти описания часто содержат умлауты или похожие символы.

Я получаю эти поля из двух разных полей php, и я ничего не делаю с данными, но они отображаются непоследовательно.

В файле1 он будет отображаться правильно, как показано ниже, или добавление

$con->query("SET NAMES 'utf8'"); 

и

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

Если я добавлю только одно из вышеперечисленных в файл1, данные будут отображаться некорректно.

В файле2 он будет отображаться корректно, только если

$con->query("SET NAMES 'utf8'"); 

установлено.

Добавление либо

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

в сочетании с запросом набора имен или пропуском запроса набора имен приведет к его неправильному отображению.

$con->set_charset("utf8");

, кажется, не имеет значения в любой момент.

Эта проблема существует в Internet Explorer и Firefox в Windows и Linux.

Пример данных, которые отображаются непоследовательно:

ED HARDY SCHUHE IM JAPAN-STYLE, GRÖßE 36

File1:

<?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);
}

File2:

<?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);
    }
}

У меня есть приложение ajax с index.php, для которого я установил

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

Затем я загружаю слой с контентом через ajax, используя file2, который неправильно отображает данные. Данные становятся ссылкой, которая использует файл1 для загрузки данных в другой слой, который отображает данные правильно.

Я действительно не понимаю, откуда исходит несоответствие.

редактировать:

Данные отображаются правильно в файле1 с заданными именами и заголовками, а страница отображается как utf-8.

Файл 2 будет правильно отображать данные только в том случае, если в информации на веб-странице указано, что набор символов соответствует ISO-8859-1, что означает пропуск названий набора и установку заголовка.

1 Ответ

0 голосов
/ 21 апреля 2009

Убедитесь, что файлы сохранены в кодировке utf8, а не в другом месте. Вероятно, это можно сделать через вашу IDE или текстовый редактор. То есть в затмении вы можете выбрать Edit-> Set Encoding

(я думаю, что file2.php или index.php сохраняются с другой кодировкой)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...