2013-05-22 12 views
10

मैं एक सरणी है:php array को 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); 

मैं इसे से विंडोज़ -1250 utf-8 में बदलने के लिए है, क्योंकि मैं की तरह

बेस्ट वर्ण ही चाहते हैं।

+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

यू इस

<?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 – 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 का उपयोग करके प्रत्येक पंक्ति को "आलसी" रूपांतरित करने के बजाय, आप एक ही समय में पूरा परिणाम सेट कर सकते हैं।

+0

mb_detect_encoding() का उपयोग करने के लिए upvoted पैरामीटर 1 स्ट्रिंग होने की अपेक्षा करता है, $ res स्ट्रिंग नहीं है। – Jacta

8

एक पीडीओ कनेक्शन के मामले में, मदद कर सकता है निम्नलिखित है, लेकिन डेटाबेस को UTF-8 में होना चाहिए:

इस लेख के कारण
//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

एक अच्छा एसईओ साइट है, इसलिए मैं बनाएँ- उपयोग करने के लिए सुझाव है इस समस्या को हल करने के लिए "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; 
} 
संबंधित मुद्दे