2017-03-01 65 views
0

私は基本的に私は、ウェブサイトからのメタタグを抽出していて、文字セットがUTF-8でない場合、私はそれらを変換しようとするとUTF-8PHPのmb_convert_variables再帰エラー

にいくつかの配列を変換する上で問題を抱えていますUTF-8に変換して、適切に保存して表示することができます。変換前の元の配列は次のとおりです。

print_r($details); 


    [base] => http://www.example.com/something/page/ 
    [charset] => iso-8859-1 
    [favicon] => http://www.example.com/favicon.ico 
    [meta] => Array 
     (
      [description] => Some Description 
      [keywords] => 
     ) 

    [images] => Array 
     (
      [0] => http://cdn.example.com/wp-content/themes/original/images/logo.jpg 
      [1] => http://cdn.examplecom/wp-content/uploads/2016/10/EXAMPLE-imageoptim-twitter-bird-16x16.png 

     ) 

    [openGraph] => Array 
     (
      [locale] => en_GB 
      [type] => article 
      [title] => Some Title 
      [description] => Some Description 
      [url] => http://www.example.com/something/page/ 
      [site_name] => EXAMPLE 
      [image] => http://cdn-r1.example.com/wp-content/uploads/2017/02/621-Example-fb.jpg 
      [image:width] => 736 
      [image:height] => 378 
      [imagePath] => http://cdn-r1.example.com/wp-content/uploads/2017/02/621-Example-fb.jpg 
     ) 

    [title] => Some Title 
    [url] => http://www.example.com/something/page/ 
    [url_description] => Some Description 

    //End of print_r(); 

だから、上部の配列はすべて素晴らしく、適切であるが、私は、テキストが正しくかどうかが表示されるかどうかを知ることができなくなりますので、私は、ウェブサイトの統計以来、UTF-8に変換しますその文字セットはutf-8ではありません。

私は、出力は$詳細については、奇妙である、次の

mb_convert_variables('utf-8', $details['charset'], $details); 

注[ 'メタ']と$詳細[ 'openGraph']による上記の配列を置きます。配列はリサイクルに置き換えられました。私はこれをgoogleにしようとしましたが、何も見つかりませんでした。

print_r($details); 

//Note: This is the exact print_r results with the *RECURSIVE* words. 

    [base] => http://www.example.com/something/page/ 
    [charset] => iso-8859-1 
    [favicon] => http://www.example.com/favicon.ico 
    [meta] => Array 
*RECURSION* 

    [images] => Array 
     (
      [0] => http://cdn.example.com/wp-content/themes/original/images/logo.jpg 
      [1] => http://cdn.examplecom/wp-content/uploads/2016/10/EXAMPLE-imageoptim-twitter-bird-16x16.png 

     ) 

    [openGraph] => Array 
*RECURSION* 
    [title] => Some Title 
    [url] => http://www.example.com/something/page/ 
    [url_description] => Some Description 

私はそれをシリアル化し、それをアンシリアライズした場合上記の、私は

echo json_encode($details); 
die(); 

とJSONとして、それを出力することができないことは...しかし、それは再び大丈夫ですので。

echo json_encode(unserialize(serialize($details))); 
die(); 

私の配列またはコードには何が問題なのでしょうか?私は現在のシリアル化およびシリアル化解除操作を行うことができますが、私の将来のすべてのデータに影響を与える前に、問題を知りたいと思います。

答えて

2

手動でそのバグ、すでに報告された、ループthroughtとcorvert各文字列mb_convert_encoding

function mb_convert_array($to_encoding, $from_encoding, $array) 
{ 
    foreach($array as $key => $value) 
    { 
     if(is_array($value)) 
     { 
      $array[$key] = mb_convert_array($to_encoding, $from_encoding, $value); 
     } 
     else 
     { 
      $array[$key] = mb_convert_encoding($value, $to_encoding, $from_encoding); 
     } 
    } 

    return $array; 
} 

mb_convert_array('utf-8', $details['charset'], $details);

+0

とありがとうございました!私はコードを使用していますが、今はエラーが返っていません。しかし、速度はmb_convert_variableよりも2倍遅い。うまくいけば、彼らはすぐにそれを修正します。 –