2013-05-22 9 views
10

Ho un array:Come convertire l'array php in utf8?

require_once ('config.php'); 
require_once ('php/Db.class.php'); 
require_once ('php/Top.class.php'); 

echo "db"; 

$db = new Db(DB_CUSTOM); 
$db->connect(); 

$res = $db->getResult("select first 1 * from reklamacje"); 

print_r($res); 

voglio convertirlo dalle finestre-1250 a UTF-8, perché ho caratteri come

migliore.

+0

È possibile utilizzare la funzione utf8_encode stringa (string $ dati). –

+2

Cosa fare se si memorizzano/recuperano in origine dati in una codifica corretta? Ha senso correggere la radice del problema e non le conseguenze – zerkms

+10

'$ res = array_map ('utf8_encode', $ res);'. – Leri

risposta

0

È possibile utilizzare la funzione string utf8_encode(string $data) per ottenere ciò che si desidera. È per una singola stringa. Puoi scrivere la tua funzione usando la quale puoi convertire un array con l'aiuto della funzione utf8_encode.

+1

Hai controllato qual è la codifica in ingresso usata per 'utf8_encode'? – zerkms

15
array_walk(
    $myArray, 
    function (&$entry) { 
     $entry = iconv('Windows-1250', 'UTF-8', $entry); 
    } 
); 
5

U può usare qualcosa di simile

<?php 
    array_walk_recursive(
           $array, function (&$value) { 
            $value = htmlspecialchars(html_entity_decode($value, ENT_QUOTES, 'UTF-8'), ENT_QUOTES, 'UTF-8'); 
           } 
         ); 
?> 
+0

upvoted per l'uso di array_walk_recursive – Bedu33

24
$utfEncodedArray = array_map("utf8_encode", $inputArray); 

Fa il lavoro e restituisce una matrice serializzato con i tasti numerici (non un Assoc).

-2

Invece di usare la ricorsione a che fare con gli array multidimensionali, che può essere lenta, è possibile effettuare le seguenti operazioni:

$res = json_decode(
    json_encode(
     iconv(
      mb_detect_encoding($res, mb_detect_order(), true), 
      'UTF-8', 
      $res 
     ) 
    ), 
    true 
); 

Questo permette di convertire qualsiasi set di caratteri da UTF8 e anche preservare le chiavi nella propria matrice. Quindi, invece di "lazy" convertire ogni riga usando array_walk, si potrebbe fare tutto il set di risultati in un colpo solo.

+0

mb_detect_encoding() si aspetta che il parametro 1 sia stringa, $ res NON è una stringa. – Jacta

8

In caso di collegamento DOP, il seguente potrebbe aiutare, ma il database deve essere in UTF-8:

//Connect 
$db = new PDO(
    'mysql:host=localhost;dbname=database_name;', 'dbuser', 'dbpassword', 
    array('charset'=>'utf8') 
); 
$db->query("SET CHARACTER SET utf8"); 
+0

Grazie, mi ha salvato qualche problema. – GoldenJoe

+0

Questo funziona per me – Casperon

0

A causa di questo articolo è un buon sito di SEO, quindi suggerisco di usare Build- nella funzione "mb_convert_variables" per risolvere questo problema. Funziona con una semplice sintassi.

mb_convert_variables('utf-8', 'original encode', array/object)

+0

aggiungere il formato del codice nella risposta. –

1

array_walk_recursive ( $ array, funzione (& $ ingresso) {$ entry = mb_convert_encoding ( $ ingresso, 'UTF-8' );} );

0

una funzione più generale per codificare un array è:

/** 
* also for multidemensional arrays 
* 
* @param array $array 
* @param string $sourceEncoding 
* @param string $destinationEncoding 
* 
* @return array 
*/ 
function encodeArray(array $array, string $sourceEncoding, string $destinationEncoding = 'UTF-8'): array 
{ 
    if($sourceEncoding === $destinationEncoding){ 
     return $array; 
    } 

    array_walk_recursive($array, 
     function(&$array) use ($sourceEncoding, $destinationEncoding) { 
      $array = mb_convert_encoding($array, $destinationEncoding, $sourceEncoding); 
     } 
    ); 

    return $array; 
}