2010-02-01 13 views
9

Spero che qui ci sia qualcuno con più conoscenze su Zend Framework di me, ho cercato di cercare la risposta, ma non sono in grado di trovare nulla ovunque.Problema con i caratteri Zend Framework e UTF-8 (æøå)

Problema:

Quando si aggiunge il contenuto di uno Zend_Form al database con l'uso di Zend_Db personaggi æ ø A è sostituito dal øÃ|à ¥

sistema

  • WampServer 2.0i
    • Apache 2. 2.11
    • MySQL 5.1.36
    • PHP 5.3.0
  • Zend Framework 1.10.0

Modifiche realizza al farlo funzionare (che non)

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 

a tutte le forme che ho aggiunto

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

E in bootstrap.php ho messo il seguente codice:

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

Il database è impostato su utf8_general_ci

Qualcuno ha un suggerimento su come farlo funzionare?

Soulution:

Si tratta di un bug in PHP 5.3.0 e 5.3.1 (http://bugs.php.net/bug.php?id=47224 ), così ho scelto di downgrade a 5.2.11, e tutto ha funzionato come un fascino.

Grazie a Pekka e Greg K per avermi indicato nella giusta direzione.

risposta

3

Ascoltando la tua descrizione, i dati partono dal modulo come UTF-8. Potrebbe essere che le tabelle del proprio database sono ancora latin1?

+0

Credo abbia detto che il database è impostato su 'utf8_general_ci' –

+0

Oh sì, lo ho sovrascritto. Tuttavia, anche le tabelle e le loro colonne devono essere utf-8 (la conversione del db non è sufficiente). Se conferma che le tabelle e le colonne sono UTF-8, eliminerò questa risposta. –

+0

Grazie per la risposta. In realtà avevo dimenticato di convertire i campi stessi, ma nessun cambiamento di comportamento dopo averlo fatto. –

0

uso htmlentities ($ val) per valori di uscita codificati

+0

questo non ha funzionato per me perché converte semplicemente i caratteri sbagliati nella versione dell'entità html – Andrew

1

soluzione che ha funzionato per me:

Tutte le cose del database di cui sopra, più l'aggiunta del tag di codifica UTF-8 headMeta al layout.

Quindi, layout.phtml si presenta così:

<?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> 

E Bootstrap.php in questo modo:

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'); 
    } 

} 

caratteri Ora svedesi come la visualizzazione AAO correttamente, e, anche se non provato, credo cinese o qualsiasi altra cosa sarà pure.

0

Il problema per me si è rivelato che avevo un decoratore che utilizza htmlentities() che per impostazione predefinita è ISO-8859-1 codifica se non specificato, invece di UTF-8 per le versioni di PHP> = 5.4.

0

Ho lo stesso problema nel mio sito, ho risolto questo problema aggiungendo il set di caratteri nel file di Application.ini.

qui aggiungo i seguenti codici.

resources.db.params.charset = "utf8" 
resources.db.params.driver_options.1002 = "SET NAMES utf8" 
resources.db.isDefaultTableAdapter = true