web-dev-qa-db-ja.com

PHPおよびMysqlUTF-8(特殊文字)の問題

(ProductTitle)というテキストボックスが1つあるフォームがあります

テキストボックスに例として「Étuit」と入力して[保存]をクリックすると、Productというテーブルにデータが投稿されます。 ProductTitleのデータベース内の結果はÉtuitです。私の懸念は特殊文字についてです。 Éをデータベースに入れる代わりに、私はそれを手に入れました

データベースからスパンに製品タイトル(「Étuit」)をロードするとき。それは正しく表示されます。
しかし、テキストボックス内にロードして製品タイトルを編集すると、「tuit」と表示されます。

誰もがその理由を知っています。

私はそれをhtmlの頭に入れます

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

注:フォームで[保存]をクリックすると、データはjqueryajaxメソッドで投稿されます。

12
Jean-Francois

tf8_encode() および tf8_decode() を見てください。 マルチバイト文字列関数 も見てください。

7
AlienWebguy

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'
?>
10
Pedro Lobito

おそらく何が起こっているのかというと、クライアントのデフォルトの文字セットがUTF-8に設定されていないため、一方向または他の方向に転置されています。これはいくつかの異なる方法でカバーされています ここ:

多くの場合、接続がインスタンス化された直後の「SET NAMES utf8」の初期化クエリは、今後の問題を解決しますが、保存されていると思うもの(utf8)が実際に保存されているものであることを確認してください。そうでない場合は、クリーンアップジョブがある可能性があります。

9
gview

この投稿では、PHPおよびMySQLでUTF-8を構成して操作する方法について説明します。これにより、時間を節約できます。

PHPおよびMySQL のUTF-8プライマー

0
Dmitry Pavlov

コード内のすべての接続の前にSETNAMESを気にしないために、mysql接続文字列のパラメーターを使用できます。

"jdbc:mysql://hostAddress:port/databaseName?characterEncoding=UTF-8"
0
Zon

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);
}
0
Samuel Corradi

これらは私のために働きます:

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'");
0
lmcDevloper

私もこれに苦労しましたが、以下はいつも私のために働きます!データを操作する前に、エンコードを次のように設定してください。

try{
  $dbh = new PDO($dsn, $user, $pass);
  $dbh->query("SET NAMES 'utf8'");
  print "Connected";
 }

catch(PDOException $e){
  print "Error!!   " . $e->getMessage()."<br/>";
  die();
 }