PHP unserialize sorun

3 Cevap php

Nasıl oluyor unserialize benim dizisi geri değil mi? Aşağıdaki kod bakın ..

// prints a:1:{s:8:"txn_type";s:32:"recurring_payment_profile_cancel";}
echo $item['response']; 

// prints nothing
print_r(unserialize($item['response']));

Print_r ($ yanıt) bana hiçbir şey verir anlıyorum

** Edit - Ben bu fark

Notice: unserialize () [function.unserialize]: Hata 6 2.797 bayt hat 13 / home / reitinve / public_html / aksiyon / doc.php uzaklığındaki

Ne demek bu?

3 Cevap

O $item['response'] önce veya sonra bazı boşluk içeriyor mümkün mü?

Giriş strlen($item['response']) sana 61 verir.

Edit: Bu sonunda boşluk ile çalışmak gibi görünüyor, ama başında boşluk o unserialize başarısız yapacak.

Edit: bu hata iletisi ya anlamı boşluklarla bir sürü var (neredeyse 2kb bunu), veya $item['response'] echo arasında değişmiş olan unserialize

Bana gayet iyi çalışıyor. Eğer $item['response'] bir dize olduğundan emin misin? evet, lider whitespaces gibi görünüyor.

ve dev sunucu php size 'hiçbir şey' vermek asla. tüm hataları, uyarıları ve bildirimleri üretmek için yapılandırılmalıdır. Bu size daha fazla bilgi vermek gibi de yerine print_r ve http://php.net/var_dump kullanabilirsiniz.

Ben bu sorun vardı ve onu nasıl dışarı çalıştı neden İşte:

Buna benzer benim girdi bir dizi depolama edildi:

value="<?php echo htmlspecialchars(serialize(array($a, $b))); ?>"

İşte, ben, çünkü olası ayrıştırma hataları htmlspecialchars() kullanmak zorunda kaldı.

Ben nesneleştirmek çalıştım, sonra bana bu Error at offset X of Y bytes in ... hata verdi. Ben, ekrana dizgilenmemiş dize basılmış bazı karakterlerin html eşdeğer hataya neden olduğunu fark etti.

Daha açık olmak gerekirse, çift tırnak html kodları %22 bu hataya neden oldu. Yani alıntı karakter ile onları geri değiştirilir ve o çalıştı.

unserialize(str_replace('%22', '"', $_POST['serialized']));

Bu yüzden herhangi bir html kodları dizgeleştirilmiş var olmadığını kontrol edin ve özgün karakterleri ile geri yerine daha iyidir.