2012-04-26 31 views
14

mi juego de mesa char es UTF-8 y es la colación es utf8.now tengo este código:UTF-8 - PHP y MySQLi UTF8

$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"); 

    } 

sino por poner es:

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

¿qué puedo ¿hacer? Editar: i sustituida:

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'); 

con

$mysqli->set_charset("utf8") 

pero no hay diferencia.

+0

¿Su instalación de base de datos/tabla es kollation utf8? – tonymarschall

+0

@tonymarschall sí lo es. –

Respuesta

42

favor sustituir mysql_set_charset('utf8');-$mysqli->set_charset("utf8") :-)

+0

cambié eso pero ninguna diferencia –

+2

¿Ha usado codificación utf 8 en el encabezado de su página donde esta salida está por llegar? –

+0

¡gracias funcionó! –

14
or mysqli_set_charset($this->mysqli,"utf8"); 
mysqli_set_charset($conn,"utf8"); 
0

escenario interesante que puede ayudar a alguien más. Sin detalles/explicaciones técnicas y, en su lugar, solo un impulso/pista en la dirección correcta.

El escenario: creación automática remota de una cuenta de usuario basada en una transacción exitosa/verificada de IPN PayPal. Mysqli Query crea datos de usuario y de usuario, pero el valor de esos datos contiene caracteres de formato ocultos e invalida el uso de los datos llamados en el procesamiento de Formularios. Solución muy simple sin cambiar/alterar ninguna tabla DB existente. Básicamente esto garantiza que sus datos sean solo caracteres imprimibles en ASCII e incluso que usen $ mysqli-> set_charset ("utf8"); realmente no es tan importante ya que está preparando sus datos para ser procesados ​​y ingresados ​​como "ASCII clean".

$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

Al recuperar datos de la base de datos, no sólo obtener los datos correctamente, pero también es necesario para mostrarlo en las páginas correctamente, así que trate de usar codificación UTF-8 en su encabezado de la página:

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

<meta charset="utf-8">

Ese es mi problema y la solución, gracias a Rohit Kumar Choudhary.