Zend Framework ve UTF-8 karakter (ÆØÅ) ile Sorun

5 Cevap php

Burada Umarım benden daha Zend Framework hakkında daha fazla bilgiye sahip bazıları, ben cevap aramak için çalışıyor ettik ama ben her yerde bir şey yüzgeç mümkün değilim.

Problem:

à ¥ |   ¸ à değiştirilir ø Zend_Db'nin kullanımı karakterleri Æ ile veritabanına bir Zend_Form içeriğini eklerken

System

  • WampServer 2.0i
    • Apache 2.2.11
    • MySQL 5.1.36
    • PHP 5.3.0
  • Zend Framework 1.10.0

Modifications done to make it work (which it does not)

application.ini

resources.db.adapter = "pdo_mysql"
resources.db.params.host = "localhost"
resources.db.params.username = "//Brukernavn//"
resources.db.params.password = "//Passord//"
resources.db.params.dbname = "//Database//"
resources.db.params.charset = "utf8"
resources.db.params.driver_options.1002 = "SET NAMES utf8"
resources.db.isDefaultTableAdapter = true

Ben ekledim tüm formlar için

->setAttrib('accept-charset', 'utf-8');

Ve bootstrap.php ben aşağıdaki kodu koydum:

$view->setEncoding('UTF-8');
$view->doctype('XHTML1_STRICT');
$view->headMeta()->appendHttpEquiv('Content-Type', 'text/html;charset=utf-8');

Veritabanı utf8_general_ci ayarlanır

Herkes işe almak için nasıl bir ipucu var mı?

Soulution:

It's a bug in PHP 5.3.0 and 5.3.1 ( http://bugs.php.net/bug.php?id=47224 ) so I choose to downgrade to 5.2.11, and all worked like a charm.

Bana doğru yönde işaret için Pekka ve Greg K teşekkürler.

5 Cevap

Senin tarifinden dinlemek, veri UTF-8 olarak forma uzaklaşmaktadır. Sizin database tables themselves hala bu olabilir latin1?

kodlanmış çıkış değerlerine htmlentitiesi ($ val) kullanın

Benim için çalıştı Çözüm:

Yukarıdaki veritabanı şeylerin tümü, artı düzene UTF-8 kodlama headMeta etiketi ekleyerek.

Yani, layout.phtml bu gibi görünüyor:

<?php echo $this->doctype() ?>
<html xmlns="http://www.w3.org/1999/xhtml">
    <head>
       <?php echo $this->headMeta(); ?> <!-- This one does the trick! -->       
    </head>
    <body>
        <?php echo $this->layout()->content; ?> 
    </body>
</html>

Bu gibi ve bootstrap.php:

class Bootstrap extends Zend_Application_Bootstrap_Bootstrap
{

    protected function _initDoctype()
    {
        $this->bootstrap('view');
        $view = $this->getResource('view');
        $view->setEncoding('UTF-8');
        $view->doctype('XHTML1_STRICT');
        $view->headMeta()->appendHttpEquiv('Content-Type', 'text/html;charset=utf-8');
    }

}

Şimdi isveç doğru aaO ekran gibi karakter, ve, ben Çince düşünmek ya da her neyse olacak gibi iyi, denenmiş olmasa da.

Benim için sorun PHP> = 5.4 sürümleri için htmlentities() which defaults to ISO-8859-1 kodlaması eğer belirtilmemişse, yerine UTF-8 kullanarak bir dekoratör olduğunu ortaya çıktı.

Fonksiyonu _initDatabase in () aşağıdaki kodu ekleyin gerekir.

$db->getConnection()->exec("SET NAMES 'utf8'");

Burada bu başvurabilirsiniz: http://osdir.com/ml/php.zend.framework.db/2008-04/msg00012.html