web-dev-qa-db-fra.com

utf 8 - PHP et MySQLi UTF8

mon jeu de caractères de table est utf8 et sa collation est utf8.now j'ai ce code:

   $mysqli = new mysqli("localhost", "root", "", "Amoozeshgah");

            if (mysqli_connect_errno()) {
                  printf("Connect failed: %s\n", mysqli_connect_error());

            }
          if (!$mysqli->set_charset("utf8")) {
    printf("Error loading character set utf8: %s\n", $mysqli->error);
} else {
    printf("Current character set: %s\n", $mysqli->character_set_name());
}
        mysql_set_charset('utf8');
            if ($stmt = $mysqli->prepare("SELECT About_Title FROM Tbl_About WHERE About_Id=?")) {
                $city = 8;

               /* bind parameters for markers */
                $stmt->bind_param("s", $city);

              /* execute query */
                $stmt->execute();

               /* bind result variables */

                  $result = $stmt->get_result();

             /* fetch value */
            while ($myrow = $result->fetch_assoc()) {

        // use your $myrow array as you would with any other fetch
        printf("%s is in district %s\n", $city, $myrow['About_Title']);
        print("shod");

    }

mais out out is is:

Current character set: utf8 8 is in district نتمنتشس shod

que puis-je faire? Edit: J'ai remplacé:

if (!$mysqli->set_charset("utf8")) {
        printf("Error loading character set utf8: %s\n", $mysqli->error);
    } else {
        printf("Current character set: %s\n", $mysqli->character_set_name());
    }
            mysql_set_charset('utf8');

avec 

$mysqli->set_charset("utf8")

mais pas de différence.

17
Mahdi_Nine

Veuillez remplacer mysql_set_charset('utf8'); par $mysqli->set_charset("utf8") :-)

49
or mysqli_set_charset($this->mysqli,"utf8");
mysqli_set_charset($conn,"utf8");
18
Rinzler

Scénario intéressant qui peut aider quelqu'un d'autre. Pas de détails techniques/explications et juste un Push/indice dans la bonne direction.

Le scénario: création automatisée à distance d'un compte d'utilisateur basé sur une transaction IPN Paypal réussie/VÉRIFIÉE. Mysqli Query crée des données utilisateur et usermeta, mais la valeur de ces données contient des caractères de formatage masqués et invalide l'utilisation de ces données appelée Traitement de formulaire. Solution très simple sans changer/altérer les tables de base de données existantes. En gros, cela garantit que vos données ne sont que ASCII caractères imprimables et même en utilisant $ mysqli-> set_charset ("utf8"); Ce n’est pas vraiment important puisque vous préparez vos données à être traitées et entrées "propres ASCII".

    $create_ipn = $mysqli->prepare("INSERT INTO xxx_somewhere (some_ipn_parameter , email, domain, item) VALUES (?, ?, ?, ?)");
    $create_ipn->bind_param("ssss", $some_ipn_parameter, $email, $domain, $item);

    $some_ipn_parameter = preg_replace( '/[^\x01-\x7F]/', "", 'the_actual_ipn_data' );
    $email = '[email protected]';
    $domain = '';
    $item = 'Test';
    $create_ipn->execute();         
0
Ed-AITpro

Lorsque vous récupérez des données dans une base de données, vous obtenez non seulement les données correctement, mais vous devez également les afficher correctement sur les pages. Essayez donc d’utiliser le codage UTF-8 dans votre en-tête de page:

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

<meta charset="utf-8">

C'est mon problème et ma solution, grâce à Rohit Kumar Choudhary.

0
wbswjc