(ProductTitle)というテキストボックスが1つあるフォームがあります
テキストボックスに例として「Étuit」と入力して[保存]をクリックすると、Productというテーブルにデータが投稿されます。 ProductTitleのデータベース内の結果はÉtuitです。私の懸念は特殊文字についてです。 Éをデータベースに入れる代わりに、私はそれを手に入れました
データベースからスパンに製品タイトル(「Étuit」)をロードするとき。それは正しく表示されます。
しかし、テキストボックス内にロードして製品タイトルを編集すると、「tuit」と表示されます。
誰もがその理由を知っています。
私はそれをhtmlの頭に入れます
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
注:フォームで[保存]をクリックすると、データはjqueryajaxメソッドで投稿されます。
tf8_encode() および tf8_decode() を見てください。 マルチバイト文字列関数 も見てください。
DBを使用する前に、クライアントエンコーディングを設定してみてください。
mysql_query("SET NAMES 'utf8'");
上記が機能しない場合は、utf8エンコード/デコード関数を使用してください。
<?
$string ="Étuit";
?>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
</head>
<?
echo $string; // echo's '?tuit'
echo utf8_encode($string); // echo's 'Étuit'
?>
おそらく何が起こっているのかというと、クライアントのデフォルトの文字セットがUTF-8に設定されていないため、一方向または他の方向に転置されています。これはいくつかの異なる方法でカバーされています ここ:
多くの場合、接続がインスタンス化された直後の「SET NAMES utf8」の初期化クエリは、今後の問題を解決しますが、保存されていると思うもの(utf8)が実際に保存されているものであることを確認してください。そうでない場合は、クリーンアップジョブがある可能性があります。
この投稿では、PHPおよびMySQLでUTF-8を構成して操作する方法について説明します。これにより、時間を節約できます。
PHPおよびMySQL のUTF-8プライマー
コード内のすべての接続の前にSETNAMESを気にしないために、mysql接続文字列のパラメーターを使用できます。
"jdbc:mysql://hostAddress:port/databaseName?characterEncoding=UTF-8"
Mysqli libを使用しているときは、set_charsetメソッドを使用します。
error_reporting(E_ALL);
$mysqli = new mysqli('localhost', 'login', "pass", 'database');
if ( ! $mysqli->set_charset("utf8") )
{
printf("Error loading character set utf8: %s\n", $mysqli->error);
}
これらは私のために働きます:
HTMLヘッダーの場合:
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
PHP接続後:
$conexion = @mysql_connect($servidor, $usuario, $contrasenha);
mysql_select_db($BD, $conexion) or die(mysql_error($conexion));
mysql_query("SET NAMES 'utf8'");
私もこれに苦労しましたが、以下はいつも私のために働きます!データを操作する前に、エンコードを次のように設定してください。
try{
$dbh = new PDO($dsn, $user, $pass);
$dbh->query("SET NAMES 'utf8'");
print "Connected";
}
catch(PDOException $e){
print "Error!! " . $e->getMessage()."<br/>";
die();
}