2012-04-16 6 views
0

PHPシリアル化に問題があります。これが含まれていると余分な文字スペースがあります。それは私が7PHPシリアライゼーションエラーが2文字でカウントされます

$episodes_count = sizeof($episode_title); 
$episodes = array(); 
$content = ''; 

for ($i = 0; $i <= $episodes_count; $i++) { 
    $title = htmlspecialchars($episode_title[$i], ENT_QUOTES); 
    $airdate = $episodes_airdates[$i]; 
    $season = $episodes_seasons[$i]; 
    $number = $episodes_numbers[$i]; 
    $plot = $episodes_plot[$i]; 

    // check if empty 
    if (!empty($title) && !empty($number) && !empty($plot)) { 
     $episodes[] = array(
      'title' => $title, 
      'airdate' => $airdate, 
      'season' => $season, 
      'number' => $number, 
      'plot' => $plot, 
     ); 
    } 
} 

// Serialized Episodes in case they exist, if not, remove the goal post 
if (sizeof($episodes) > 0) { 
    $content = str_replace("'", '%',serialize($episodes)); 
} 


update_post_meta($post_id, 'episodes', $content); 
} 
+0

人は 'sizeof()'を使用しますか? :)余分な空白を整えたり、タイトルから二重引用符をエスケープしようとしていますか? – MetalFrog

+0

wordpressがシリアル化されていない文字列を非シリアル化として処理するとは思わないでください。ポストメタは自動的にシリアライズされますが、それは起こるかもしれないし、そうでないかもしれません。そして、これが再び読み込まれると、シリアライズされたとして評価されますが、文字列を変更したため、 – hakre

+1

@MetalFrogはい私はsizeof()、lolを使用します。あなたの他の質問に答えるために、私は空白を取り除こうとしていました。 – Craig

答えて

2

を取得し、6文字かどう例あなたはupdate_post_metaにワードプレスにシリアライズに見えるいくつかのデータを渡す - ワードプレスはそれで問題があることができ、データが保存されている間壊れて取得されます。

これを防ぐには、文字列に接頭辞を付けて、それがもうシリアル化されないようにするか、文字列全体をエンコードすることさえできます。 base64_encodeとなります。これは、ワードプレスや他のコンポーネントがエンコードの問題のために値を変更するのを防ぎます。

+0

これはWordpressのバグとして提出する必要があります。 –

+0

@EmilVikström:これは既に報告されていますが、実際に設計されているため、修正するためのコンセンサスはありません。 – hakre

関連する問題