2013-05-22 6 views
10

나는 배열을 가지고 :php 배열을 utf8로 변환하는 방법?

내가 제일

같은 문자가 있기 때문에, UTF-8로 창-1250에서 변환 할

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

.

+0

당신은 문자열 utf8_encode (문자열 $ 데이터) 기능을 사용할 수 있습니다. –

+2

원래 올바른 인코딩으로 데이터를 저장/검색하는 경우 어떻게해야합니까? 문제의 근원을 결과가 아닌 – zerkms

+10

'$ res = array_map ('utf8_encode', $ res);'가 아닌 루트로 수정하는 것이 좋습니다. – Leri

답변

0

string utf8_encode(string $data) 기능을 사용하면 원하는 것을 성취 할 수 있습니다. 단일 문자열 용입니다. utf8_encode 함수의 도움으로 배열을 변환 할 수있는 자신의 함수를 작성할 수 있습니다.

+1

'utf8_encode'에 사용 된 입력 인코딩이 무엇인지 확인 했습니까? – zerkms

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

가 U이

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

array_walk_recursive를 사용하여 upvoted – Bedu33

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

같은 것을 사용하면 작업을 수행하고 숫자 키 (아닌 ASSOC)와 직렬화 된 배열을 반환합니다. 대신 속도가 느려질 수 있습니다 다차원 배열, 처리하는 재귀를 사용

-2

, 당신은 다음과 같은 작업을 수행 할 수

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

이 UTF8로 설정 모든 문자를 변환하고 또한 당신의 배열에 키를 유지합니다. 따라서 각 행을 array_walk을 사용하여 "게으른"변환하는 대신 한 번에 전체 결과 집합을 수행 할 수 있습니다. PDO 연결의 경우

+0

mb_detect_encoding()은 매개 변수 1이 문자열이고 $ res가 문자열이 아닐 것으로 예상합니다. – Jacta

8

의 도움이 될 수 있습니다 다음,하지만 데이터베이스는 UTF-8에 있어야합니다 : 좋은 SEO 사이트입니다

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

감사합니다. 몇 가지 문제를 해결해주십시오. – GoldenJoe

+0

이 작품은 나를 위해 – Casperon

0

때문에이 문서에, 그래서으로 Build- 사용하는 것이 좋습니다 함수 "mb_convert_variables"에서이 문제를 해결하십시오. 간단한 구문으로 작동합니다.

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

+0

답변에 코드 형식을 추가합니다. –

1

array_walk_recursive ( $ 어레이 함수 (& $ 엔트리) { $ 항목 = mb_convert_encoding ( $ 엔트리 "UTF-8" ) } ); 배열을 인코딩하는

0

더 일반적인 기능은 다음과 같습니다

/** 
* 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; 
}