1

ポーランド語の e コマース Web サイトがあり、製品カテゴリはデータベースに保存されています (ポーランド語)

何らかの理由で、特殊な外国の文字が表示されず、Web サイトの特定の部分にのみ表示されます。

ł、ą、ó などの​​文字。

問題は、カテゴリページの本体に完全に表示されますが、代替ナビゲーションとしてページの左側にも表示され、正しく表示されていないのはこの左側のナビゲーションです...表示されていますとして?または �</p>

データベースのテーブルを確認したところ、utf8_general_ci として保存されています

ページに含まれている「left-nav.php」ファイルを確認しましたが、これは UTF8 でエンコードされています。

カテゴリページのファイルも確認しましたが、本体の文字は正しく表示されており、UTF8で保存されています。

サイトのヘッダーにこのコード行があります

<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />

HeidiSQL を使用してデータベースを管理していますが、それらはデータベースに正しく保存されています

私は何かを逃していますか?これを修正するにはどうすればよいですか?

これらのような特殊文字が正しく表示される場所と正しく表示されない場所があるのはなぜですか?

左側のナビゲーションのトップ カテゴリのコードは次のとおりです。

<?php
    $sql = mysqli_query($con, "SELECT * FROM RAE_categories_pl WHERE categoryID = '".$category."'");
    $result = mysqli_fetch_array($sql);?>
    <div class="liSelect"><img src="images/arrowdown_off.gif" style="padding:0px; margin:0px -10px 0 0;float:right;"><a class="select" href="<?php echo "http://" . $_SERVER['HTTP_HOST']?>/products/<?php echo $result['categoryID'];?>"><?php echo $result['categoryName'];?></a></div>
    <?php
    $sql2 = mysqli_query($con, "SELECT RAE_sub_categories_pl.categoryName AS subCatName, RAE_sub_categories_pl.categoryID AS subCatID FROM RAE_sub_categories_pl INNER JOIN RAE_products_pl ON RAE_products_pl.subCategory = RAE_sub_categories_pl.categoryID AND RAE_products_pl.active = 1 WHERE RAE_sub_categories_pl.parentCatID = '$category' GROUP BY RAE_sub_categories_pl.categoryID");
    while ($result2 = mysqli_fetch_array($sql2))
    {?>
        <div class="liul">
                <div class="ulli">
                    <a href="<?php echo "http://" . $_SERVER['HTTP_HOST'] . "/equipment/" . $category . "/" . $result2['subCatID'];?>"><?php echo $result2['subCatName']?></a>
                </div>
        </div>
4

4 に答える 4

4

PHPスクリプトでMySQLに接続した後に使用していることを確認してください。これによりSET NAMES 'UTF8'、悪い文字が生成されます。

$con=mysqli_connect("host", "user", "pw", "db");
if (!$con)
{
    die('Failed to connect to mySQL: ' .mysqli_connect_errno());
}

/* change character set to utf8 */
if (!$con->set_charset("utf8")) {
    printf("Error loading character set utf8: %s\n", $con->error);
}

マニュアルが言うように:

SET NAMES は、クライアントが SQL ステートメントをサーバーに送信するために使用する文字セットを示します...また、サーバーがクライアントに結果を返すために使用する文字セットも指定します。

于 2013-10-31T12:10:04.477 に答える
0

外国語サポートの場合、データベース テーブルの対応するフィールドの照合をutf8_unicode_ci

于 2013-10-31T12:09:19.363 に答える
0

列の照合を次のように設定してみてください。utf8_polish_ci

例:

some_field VARCHAR(100) NULL DEFAULT NULL COLLATE 'utf8_polish_ci',

于 2013-10-31T12:09:48.830 に答える