2016-10-21 10 views
-1

私は人々がリンクを取得し、情報を入力してデータベースに保存される登録フォームを作成しようとしています。残念ながら、フォームを使用してアラビア語で情報を入力しようとすると、データベースに未知の文字として格納されます。問題データベースにアラビア語の文字を保存する

私は以下のことを成功させることなく試しました。

データベースハンドラページでデフォルトの文字セットを設定し
<meta charset="utf-8"> 
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> 
  • $cfg['DefaultCharset'] = 'utf_8'; 
    $cfg['DefaultConnectionCollation'] = 'utf8_general_ci'; 
    
  • utf8_general_ci

    に、データベースの照合順序を変更し、次のようにインデックス内のデフォルトの文字セットを設定し

    • チャテーブルを照合しました照合順序utf8_general_ci

    • sqlとしてエクスポートされ、文字セットを編集しましたが、私はすでにUTF-8を見つけました。

    • ブラウザのユニコードがUTF-8に設定されていることを確認しました。

    そして、それは、それがどのように動作するかの例です:

    <form action="signup.php" method="POST" class="form"> 
    <input type="text" name="first"><br /> 
    <input type="text" name="uid"><br /> 
    <input type="date" name="dob"><br /> 
    

    -

    $first = $_POST['first']; 
    $uid = $_POST['uid']; 
    $dob = $_POST['dob']; 
    
    $sql = "INSERT INTO students (first, uid, dob) 
    VALUES ('$first','$uid', '$dob')"; 
    
    $result = mysqli_query($conn, $sql); 
    

    そして、彼らがDBに接続するために必要なファイルを介して接続しています。

    $cfg['DefaultCharset'] = 'utf_8'; 
    $cfg['DefaultConnectionCollation'] = 'utf8_general_ci'; 
    
    $conn = mysqli_connect("localhost", "root", "", "test2"); 
    
    if (!$conn) { 
        die("Connection failed: ". mysqli_connect_error()); 
    
    } 
    

    何が原因で起こっているのかわからず、私は速い修正が必要です。

    、それがどのように見えるかです:https://i.stack.imgur.com/xiQwJ.png

  • +0

    何 'SHOWの出力は表students'を作成することですか? –

    +0

    学生 は、TABLE(MySQLとアラビア語)のための 'students'( ' ID'はint(11)NOT NULL ... –

    +0

    検索や(MySQLと文字化け)を作成します。 –

    答えて

    0

    私は2つの可能な提案を持っている:、

    set_charset()を経由して、UTF-8へのごmysqliの接続を設定するか、それが失敗した場合は、たとえばのでmb_convert_encoding

    を使用することができますが

    if (!mysqli_set_charset($conn, "utf8")) { 
        printf("Error loading character set utf8: %s\n", mysqli_error($conn)); 
        exit(); 
    } else { 
        printf("Current character set: %s\n", mysqli_character_set_name($conn)); 
    } 
    

    これが失敗した場合、または両方を併用する場合は、jus

    $first = mb_convert_encoding($first, "UTF-8"); 
    // and so forth 
    
    +0

    最初のコードが完全に働いた!ありがとうございました。 –

    0

    文字セットに関連する問題は、列単位で発生すると思われます。の文字セットを変更する前にテーブルとデータベースを作成した場合、すべての文字セットが変更されているとは限りません。

    は、以下に類似しSHOW CREATE TABLE <tablename>の出力を見直すことで、私の疑念を確認します。

    mysql> show create table arabic; 
    +--------+---------------------------------------------------------------+ 
    | Table | Create Table             | 
    +--------+---------------------------------------------------------------+ 
    | arabic | CREATE TABLE `arabic` (
        `words` varchar(60) CHARACTER SET latin1 DEFAULT NULL 
    ) ENGINE=InnoDB DEFAULT CHARSET=utf8 | 
    +--------+---------------------------------------------------------------+ 
    

    お知らせ欄wordsはまだ文字セットlatin1を持っています。

    mysql> ALTER TABLE arabic CHANGE words words VARCHAR(60) CHARACTER SET utf8; 
    Query OK, 0 rows affected (1.16 sec) 
    Records: 0 Duplicates: 0 Warnings: 0 
    

    ここで、この他のポストは、いくつかの助けになるかもしれませんまたHow to convert an entire MySQL database characterset and collation to UTF-8?

    例:いずれかのこのような個々の列を変更

    mysql> ALTER TABLE arabic CONVERT TO CHARACTER SET utf8 COLLATE utf8_general_ci; 
    Query OK, 0 rows affected (0.88 sec) 
    Records: 0 Duplicates: 0 Warnings: 0 
    
    mysql> SHOW CREATE TABLE arabic; 
    +--------+---------------------------------------------------------------+ 
    | Table | Create Table             | 
    +--------+---------------------------------------------------------------+ 
    | arabic | CREATE TABLE `arabic` (
        `words` varchar(60) DEFAULT NULL 
    ) ENGINE=InnoDB DEFAULT CHARSET=utf8 | 
    +--------+---------------------------------------------------------------+ 
    1 row in set (0.00 sec) 
    
    +0

    学生 TABLE 'students'( ' ID'はint(11)NOT NULL AUTO_INCREMENT、 'first' VARCHAR(128)NOT NULL、 ' uid'のVARCHAR(128)NOT NULL、 'dob'日、NOT NULLを、CREATE 'dep' varchar(128)NOT NULL、 ' email' varchar(128)NOT NULL、 'elevel' varchar(128)NOT NULL、 ' phone' varchar(128)NOT NULL、 PRIMARY KEY( 'ID ') )ENGINE = InnoDB AUTO_INCREMENT = 4 DEFAULT CHARSET = utf8 –

    関連する問題