LAMPアプリの文字エンコードの問題-UTF-8かどうか
-
05-07-2019 - |
質問
私はまだPHPと&でロープを学んでいます。 MySQLと私はここで文字セットの設定方法について何か間違ったことをしていることを知っていますが、ここやWebで読むべきことを理解することはできません。
PHP 5、MySQL 5を使用した標準のLAMPインストールがあります。すべてデフォルトでセットアップしました。一部のユーザーがデータベースにコメントを入力すると、一部の文字が正しく表示されません。ほとんどの文字は、現時点ではアポストロフィとダッシュです。 MySQLでは、アポストロストロフィーは’として表示されます。この方法でもページに表示されます(htmlentitiesを使用してユーザーのコメントを出力しています)。
phpMyAdminでは、MySQL CharsetはUTF8-Unicodeであると表示されます。
私のデータベースでは、私のテーブルはすべてデフォルトのLatin1-Swedish-ciで設定されています。
すべてのWebページにメタhttp-equiv =" Content-Type"があります。 content =" text / html; charset = utf-8"
サイトのhttpヘッダーを見ると、次のように表示されます:Content-Type:text / html
初心者のように、ページの一部で物事が奇妙に見えるようになるまで、文字セットをまったく考慮していませんでした。だから、すべてをutf-8に変換することは私にとって最も理にかなっており、これは私のPHPコードに影響しますか?それとも、すべてをラテン語に変換する必要がありますか?また、データベースにアクセスしてこれらの奇妙なコードを置き換える必要がありますか、それとも文字セットを適切に設定すると魔法のように表示されますか?私がこれまでに行ったすべてのいじりは助けにはなりませんでした(httpヘッダーをutf-8に設定し、ラテン語も試しました)。
解決
http://www.phpwact.org/php/i18n/charsets
このサイトは、UTF-8ですべてをうまく再生する方法について多くの良いアドバイスをくれました。
また、UTFフレンドリーであるため、htmlentitiesからhtmlspecialcharsへの切り替えを推奨しました。
主なポイントは、すべてが同じ言語で話していることを確認することです。データベース、データベース接続、PHP、ページはutf8にあります(メタタグとそういうヘッダーが必要です)。
他のヒント
これらの問題を本当に理解したい場合は、 mysql.comのこの記事。基本的に、パズルのすべてのピースにUTF-8ユニコードが必要です。 PHP側では、次のようなことを行います。
<?php header("Content-type: text/html; charset=utf-8");?>
<html>
<head>
<meta http-equiv="Content-type" value="text/html; charset=utf-8">
挿入クエリを実行するときは、テーブルの文字エンコーディングと、クエリを実行しているエンコーディングが両方ともUTF-8であることを確認する必要があります。挿入クエリを実行する直前にクエリ SET NAMES utf8
を実行することで後者を実現できます。
すべての質問を理解していないためごめんなさい。しかし、質問の一部が「UTF-8かどうか」の場合、答えは「UTF-8、もちろん!」です
間違いなく、後でよりも今すぐ整理したい。最も重要なプログラミングルールの1つは、悪い考えを続けることではありません-深く掘り下げないでください!
latin1とutf-8は互換性があるため、手動で含まれているデータを操作することなく、utf-8を使用するようにテーブルを変換できます。 MySQLはこの部分を自動的に整理します。
それでは、すべてがutf-8を話していることを確認することが重要です。 HTTPヘッダーをapacheに設定するか、メタタグを使用します。これにより、HTML出力がutf-8であることがブラウザーに通知されます。
これを念頭に置いて、送信するデータがすべてutf-8であることを確認する必要があります! php / htmlファイルをutf-8として保存するようにIDEを構成します。最後に、PHPがMySQLへのutf-8接続を使用していることを確認します-接続後にこのクエリを発行します。
SET NAMES 'utf-8';