IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Zend Framework PHP Discussion :

Bizarrerie de l'UTF-8


Sujet :

Zend Framework PHP

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre habitué
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    12
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 12
    Par défaut Bizarrerie de l'UTF-8
    Bonjour,

    Voilà plusieurs jours que j'ai passer tous les fichiers du site en UTF-8. Pas de problème de ce côté là, j'enregistre avec DreamWeaver sans BOM. Ma base est en UTF-8 également. Tous les accents s'affichent normalement et s'insèrent correctement dans les tables.
    Le site tourne sur Apache (php 5.2) et MySql, tous deux configurés en UTF-8, "AddDefaultCharset UTF-8" se trouve dans le .htaccess.
    Je rencontre le problème suivant: lors de l'affichage des 'forms', je me retrouve avec des caratères ajoutés dans le code HTML par exemple:

    <div id="header">blablabla (rendu layout default.phtml)</div>
    <div id="exemple">(rendu des vues)...<form>formelements</form>.... </div> </div>.
    Je me retrouve donc avec des '...' qui me décalent toutes mes 'forms' d'une ligne.
    Quelqu'un saurait-il m'éclairer sur ce problème ? J'ai pas mal fouillé les forums, mais personne n'en parle.

    Je vous laisse donc ma config, peut être ai-je oublié quelque chose.
    Ma config.ini :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    Code :
    [production]
     
    phpSettings.display_startup_errors = 0
    phpSettings.display_errors = 0
    phpSettings.date.timezone = "Europe/Paris"
     
    includePaths.library = LIBRARY_PATH
     
    bootstrap.path = APPLICATION_PATH "/Bootstrap.php"
    bootstrap.class = "Bootstrap"
     
    autoloaderNamespaces[] = "My_"
     
    resources.view.encoding = "UTF-8"  ; si activé : Plugin baseUrl not found !
    ;resources.layout.encoding = "UTF-8"  ; pour test, change rien
     
    ; initialize database
    resources.db.adapter = "pdo_mysql"
    resources.db.params.host = "localhost"
    resources.db.params.username = "root"
    resources.db.params.password = ""
    resources.db.params.dbname = "xxxxxx"
    resources.db.params.charset = "UTF8"
    #resources.db.params.profiler = true
    resources.db.params.date_format = "YYYY-MM-ddTHH:mm:ss"
    resources.db.isDefaultTableAdapter = true
     
     
     
    ; initialize front controller resource
     
    resources.frontController.defaultModule = "default"
    resources.frontController.controllerDirectory = APPLICATION_PATH "/controllers"
    resources.frontController.defaultControllerName = "index"
    resources.frontController.defaultAction = "index"
    resources.frontController.moduleControllerDirectoryName = "controllers"
    resources.frontController.moduleDirectory = APPLICATION_PATH "/modules"
     
     
    resources.modules[] = ""
     
    ; initialize layout resource
    resources.layout.layoutPath = APPLICATION_PATH "/layouts/scripts"
    resources.layout.layout = "default"
    resources.layout.helperPath = APPLICATION_PATH "/layouts/helpers"
     
     
     
    # initilisation du log
    resources.log.writer.type = stream
    resources.log.writer.file = APPLICATION_PATH "/logs/application.log"
     
     
     
    [development : production]
    phpSettings.display_startup_errors = 1
    phpSettings.display_errors = 1
    Mon index :

    Code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    <?php
    // Set the initial include_path. You may need to change this to ensure that
    // Zend Framework is in the include_path; additionally, for performance
    // reasons, it's best to move this to your web server configuration or php.ini
    // for production.
     
    // encoding //Ne change rien 
    setlocale(LC_CTYPE, 'C');
    mb_internal_encoding("UTF-8");
    mb_regex_encoding("UTF-8");
     
     
    set_include_path(implode(PATH_SEPARATOR, array(
    realpath(dirname(__FILE__) . '/../library'),
    get_include_path(),
    )));
     
    // Define path to application directory
    defined('APPLICATION_PATH')
    || define('APPLICATION_PATH', realpath(dirname(__FILE__) . '/../application'));
     
    // Define application environment
    defined('APPLICATION_ENV')
    || define('APPLICATION_ENV', (getenv('APPLICATION_ENV') ? getenv('APPLICATION_ENV') : 'production'));
     
     
    /** Zend_Application */
    require_once 'Zend/Application.php';
     
    // Create application, bootstrap, and run
    $application = new Zend_Application(
    						APPLICATION_ENV,
    						APPLICATION_PATH . '/configs/app.ini'
    					);
     
    $application->bootstrap();
    $application->run();
    Mon Bootstrap principal :

    Code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    <?php
    /**
     * Application bootstrap
     *
     * @uses    Zend_Application_Bootstrap_Bootstrap
     * @package QuickStart
     */
    class Bootstrap extends Zend_Application_Bootstrap_Bootstrap
    {
    	private $_acl = null;
    	private $_auth = null;
    	private $_role = null;
     
    	public function run()
    	{
    		// Cela permet d'avoir le fichier de configuration disponible depuis n'importe ou dans l'application.
    		Zend_Registry::set('config', new Zend_Config($this->getOptions()));
    		parent::run();
    	}
     
    	protected function _initAutoloader() {
    		$moduleLoader = new Zend_Application_Module_Autoloader(array(
    			'namespace' => 'My_', // pas de namespace
    			'basePath' => APPLICATION_PATH,
    		));
    		return 	$moduleLoader;
    	}
     
     
     
     
    	protected function _initDb()
    	{
    		//on charge notre fichier de configuration
    		$config = new Zend_Config($this->getOptions());
    		//On essaye de faire une connection a la base de donnee.
    		try{
    			$db = Zend_Db::factory($config->resources->db);
    			//on test si la connection se fait
    			$db->getConnection();
    		}catch ( Exception $e ) {
    			exit( $e -> getMessage() );
    		}
    		// on stock notre dbAdapter dans le registre
    		Zend_Registry::set( 'db', $db );
    		Zend_Db_Table::setDefaultAdapter($db);
    		return $db;
    	}
     
    	protected function _initViewHelpers()	{
     
    		$this->_auth = Zend_Auth::getInstance();
    		$this->_acl = new My_Model_Acl2();
     
    		$this->_role = $this->_auth->hasIdentity() ? $this->_auth->getStorage()->read()->usr_role : 'guest';
    		Zend_Registry::set('role', $this->_role);
     
    		$fc = Zend_Controller_Front::getInstance();
    			// Plugin qui verifie les droits
    			$fc->registerPlugin(new My_Plugin_Auth($this->_auth, $this->_acl));
    			//Plugin qui stock moduleName, controllerName, actionName
    			$fc->registerPlugin(new My_Plugin_LinkRegister());
     
    		// Initialisation de la vue
    		// Recup du Layout
    		$this->bootstrap('layout');
    		$layout = $this->getResource('layout');
    		$view = $layout->getView();
     
    		$view->setEncoding('UTF-8');
     
    		//Dojo
    		Zend_Dojo::enableView($view);
    		$view->dojo()
    			->addStyleSheetModule('dijit.themes.tundra')
    			->setDjConfigOption('usePlainJson', true)
    			->disable();
     
    		//HTML HEADER						
    		$view->doctype('XHTML1_STRICT');
    		$view->headMeta()->appendHttpEquiv('Content-type','text/html;charset=utf-8')
    			->appendHttpEquiv('X-UA-Compatible','IE=EmulateIE7')
    			->appendName('Description','Epitec');
    		$view->headTitle()->setSeparator(' - ');
    		$view->headTitle('Epitec');
    		$view->headScript()->appendFile('/js/jquery.js');
    		$view->headScript()->appendFile('/js/nav.js');
     
    		// Navigation (menus)
    		$navContainerConfig = new Zend_Config_Xml(APPLICATION_PATH . '/configs/menu.xml', 'nav');
    Zend_Registry::set('test',$navContainerConfig);
    		$navContainer = new Zend_Navigation($navContainerConfig);
    		$view->navigation($navContainer);
    		$view->navigation()->setAcl($this->_acl);
    		$view->navigation()->setRole($this->_role);
     
    		//View renderer //avec ou sans, change rien
    		$viewRenderer = Zend_Controller_Action_HelperBroker::getStaticHelper('ViewRenderer');
    		$viewRenderer->setView($view);
     
    		return $view;
    	}
     
     
    	/**
    	 * Initialize Translation
    	 *
    	 * @return Zend_Translate
    	 */
    	public function _initTranslate()
    	{
    		$translate = new Zend_Translate('array', APPLICATION_PATH . '/languages/fr.php', 'fr');
    		$translate->addTranslation(APPLICATION_PATH . '/languages/it.php', 'it');
    		$translate->setLocale('fr');
    		Zend_Form::setDefaultTranslator($translate);
    		Zend_Registry::set('Zend_Translate', $translate);
    		return $translate;
    	}
     
    }
    Merci de l'intérêt que vous porterez à mon sujet.
    Dans l'attente, salutations.

    JBaptiste.

  2. #2
    Membre Expert Avatar de Fench
    Homme Profil pro
    Chercheur en informatique
    Inscrit en
    Mai 2002
    Messages
    2 353
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Groenland

    Informations professionnelles :
    Activité : Chercheur en informatique
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Mai 2002
    Messages : 2 353
    Par défaut
    Salut,

    Comme personne répond, je te donnes juste une idée(car pas sûre)!

    Dans
    <div id="exemple">(rendu des vues)...<form>formelements</form>
    Pour (rendu des vues) les textes de la base de données possédent des espaces car elles sont en longueur fixe !

  3. #3
    Membre habitué
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    12
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 12
    Par défaut
    Citation Envoyé par Fench Voir le message
    Salut,

    Comme personne répond, je te donnes juste une idée(car pas sûre)!

    Dans


    Pour (rendu des vues) les textes de la base de données possédent des espaces car elles sont en longueur fixe !
    Merci pour ta réponse rapide.

    D'après ce que je comprends, et merci, je n'en avais pas eu l'idée, les retours de données des tables pour un champ de longeur 10 par ex. me renvoie par ex. 'Champs....' où les points sont des espaces donc, si je comprends bien, je devrais regarder du côté des 'trim' ou chercher à supprimmer les espaces inutiles avant de passer les données à la 'form'.

    Je vais donc tester dans ce sens là.

    JBaptiste

  4. #4
    Membre Expert Avatar de Fench
    Homme Profil pro
    Chercheur en informatique
    Inscrit en
    Mai 2002
    Messages
    2 353
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Groenland

    Informations professionnelles :
    Activité : Chercheur en informatique
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Mai 2002
    Messages : 2 353
    Par défaut
    Exactement

    J'avais déjà eu le problème mais avec PostgreSQL et c pour celà que j'ai dit que je n'étais pas sûr

  5. #5
    Membre habitué
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    12
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 12
    Par défaut
    Je viens de remarquer une autre chose.
    Mes 'forms' sont des extends de Zend_Dojo_Form et si je les étends de Zend_Form, au lieu de 3 points (...) entre mes balises, j'en ai plus que deux !
    Je suis donc aller voir du côté du code des Loader, il y à quelques fonctions du style de 'strtr' qui sont overloder par la mb_string.
    Lors du passage en UTF-8, j'ai du modifier le code du framework dans Zend_Form_Decorator_Label pour remplacer if (!strstr($class, $type)) par if (!empty($class) && !strstr($class, $type)) à la ligne 149, car mb_strstr ne fonctionne pas si $class est vide. Est-ce normal ?

    Pour info,
    php.ini
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    [mbstring]
     
    mbstring.language = UTF-8
     
    mbstring.internal_encoding = UTF-8
     
    mbstring.http_input = UTF-8
     
    mbstring.http_output = UTF-8
     
    mbstring.encoding_translation = On
     
    mbstring.detect_order = auto
     
    ;mbstring.substitute_character = none;
     
    mbstring.func_overload = 7
     
    ;mbstring.strict_encoding = On
    Je ne comprends vraiment pas ce qu'il ce passe.

    Voilà ce que je vois:
    Images attachées Images attachées  

Discussions similaires

  1. [CR8-ORACLE9] entiers divisés par 100 et autres bizarreries
    Par Seb des Monts dans le forum SAP Crystal Reports
    Réponses: 1
    Dernier message: 29/09/2004, 10h49
  2. Mozilla & UTF-8
    Par SergioF dans le forum Applications et environnements graphiques
    Réponses: 6
    Dernier message: 11/05/2004, 14h00
  3. [WebForms] Encodage, UTF-8 et accents
    Par alexischmit dans le forum Général Dotnet
    Réponses: 4
    Dernier message: 28/04/2004, 12h21
  4. Une ch'tite bizarrerie dans les Updates de SQL Server
    Par Wakko2k dans le forum MS SQL Server
    Réponses: 12
    Dernier message: 08/04/2004, 14h14
  5. Réponses: 4
    Dernier message: 19/03/2004, 11h48

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo