6

MySQL データベースから多次元配列を受け取ります

Array
(
[0] => Array
    (
        [page] => categorypropose
        [value] => baby-sitters
        [id] => 357960
    )

[1] => Array
    (
        [page] => categorysearch
        [value] => adéquate pour garder
        [id] => 357961
    )
...
)

この配列では、「自家製」関数「loadtext」を介して行う ISO-8859-1 から UTF8 への変換がいくつかあります。

しかし、私がこれを行うと:

    $array = $query->result_array();
    foreach($array as &$k)
    {
        foreach ($k as &$value)
        {
                            //Works
            $value = $this->loadtext($value, 'ISO-8859-1');
        }
    }
     //Back to normal as $this->loadtext never existed
     print_r($array);

変更は保存されません ($value をエコーすると動作しますが、最後に変更が保持されません ...)

EDIT:これは、私が使用する義務がある関数loadtextです(実際には、作成しませんでしたが、使用する必要があります...)

function loadtext($text,$charset){
    $text = stripslashes($text);
    if($charset!="UTF-8")
        $text = iconv("UTF-8",$charset,$text);
    $text = str_replace(" :"," :",$text);
    $text = str_replace(" ;"," ;",$text);
    $text = str_replace(" !"," !",$text);
    $text = str_replace(" ?"," ?",$text);
    $text = str_replace(" ."," .",$text);
    $text = str_replace(" …"," …",$text);
    return $text;
}
4

3 に答える 3

6

次のように試すことができます。

$array = $query->result_array();
foreach($array as &$k)
{
    foreach ($k as $i => &$value)
    {
                        //Works
        $k[$i] = $this->loadtext($value, 'ISO-8859-1');
    }
}
 //Back to normal as $this->loadtext never existed
 print_r($array);

さらに良いことに、CONVERT()返される文字列がすでに UTF8 形式になるように、クエリで MySQL 関数を使用することもできます。

http://dev.mysql.com/doc/refman/5.0/en/charset-convert.html

少なくとも、mb_convert_encoding()自家製関数の代わりに PHP を使用してください。車輪を再発明する理由はありません。

http://jp2.php.net/manual/ja/function.mb-convert-encoding.php

于 2012-05-30T05:05:22.397 に答える
2

私は非常にうまく機能する簡単な答えを自分で見つけました

       // ur array from mysql       
       $array = $query->result_array();


       //try it works 100 % for me just one line of code to modify 
       $result= iconv('UTF-8', 'ASCII//TRANSLIT',$array);

ソース: php.net

      // or if doesnt work then u can try like this to modify u can put it inside a foreach loop where you are loopin values 

           $page = array['page']; // to acces that element in the array where to modify
           $result= iconv('UTF-8', 'ASCII//TRANSLIT',$page);          
于 2012-05-30T05:29:34.653 に答える