2011-08-18 2 views
1

Je commence à avoir des problèmes avec l'encodage, il semble que Notepad ++ ait changé l'encodage ou quelque chose. Quoi qu'il en soit tous les fichiers ont été encodés en UTF-8, mais j'ai vérifié et certains ont changé en UTF-8 sans nomenclature. Changer un en UTF-8 a résolu le problème des caractères spéciaux.Erreur: "Impossible d'envoyer le limiteur de cache de session" lié à l'encodage

"Tageá" changé à "Tageá" mais j'ai commencé à faire une erreur:

Warning: session_start() [function.session-start]: Cannot send session cache limiter - headers already sent (output started at /home/content/02/6945202/html/usuario/index.php:1) in /home/content/02/6945202/html/usuario/index.php on line 1 

Ceci est la ligne 1:

<? session_start(); ?> 

Je ne comprends pas pourquoi je vais avoir cette question, puisque l'utilisation de la norme ANSI ou UTF-8 sans BOM la page montre sans erreurs.

Quel peut être le problème? Merci

+0

C'est parce que php envoie les caractères de codage utf au début qui identifient UTF8. – Dani

+0

Utilisez le paramètre 'charset =' de contenu correct (webserver ou php.ini) à la place de la nomenclature UTF-8. – mario

Répondre

0

http://blog.onitindustries.com/php/errors/php-session_start-on-first-line-still-getting-error/

essayer ok en utilisant cette fonction pour convertir des chaînes, enregistrer le fichier au format UTF-8 sans BOM pour cela.

<?php 
session_start(); 
function charset_decode_utf_8 ($string) { 
    /* Only do the slow convert if there are 8-bit characters */ 
    /* avoid using 0xA0 (\240) in ereg ranges. RH73 does not like that */ 
    if (! ereg("[\200-\237]", $string) and ! ereg("[\241-\377]", $string)) 
     return $string; 

    // decode three byte unicode characters 
    $string = preg_replace("/([\340-\357])([\200-\277])([\200-\277])/e",  
    "'&#'.((ord('\\1')-224)*4096 + (ord('\\2')-128)*64 + (ord('\\3')-128)).';'",  
    $string); 

    // decode two byte unicode characters 
    $string = preg_replace("/([\300-\337])([\200-\277])/e", 
    "'&#'.((ord('\\1')-192)*64+(ord('\\2')-128)).';'", 
    $string); 

    return $string; 
} 
echo charset_decode_utf_8('Tageá'); 
?> 
+0

C'est probablement le cas, mais lorsque je sauvegarde sans nomenclature, j'obtiens beaucoup de caractères supplémentaires aléatoires sur le site. http://chusmix.com/top/?ciudad=Pilar Peut-être que c'est un problème avec Notepad ++ – lisovaccaro

+0

pouvez-vous enregistrer comme utf-8 sans nom puis faire ce que je mets dans la réponse mise à jour? ... hmmm gratter cette idée . Il supprime ƒ de la chaîne. –

+0

mise à jour de la réponse. –

0

Cela est généralement causé par avoir une sortie avant d'effectuer l'appel ci-dessus. Cela arrive parce que la sortie doit venir après les en-têtes, donc s'il y a une sortie, les en-têtes sont envoyés. Un espace blanc provoquera cela, ce qui peut même être causé par des espaces ou des retours à la ligne avant ou après les balises PHP.

Pour résoudre ce problème, vous pouvez éliminer toutes les sorties avant cet appel, bien que cela soit souvent impossible.

Une meilleure solution est d'activer output_buffering dans votre fichier php.ini.

0

convertir le codage des caractères sans changer l'encodage du fichier UTF8 sans BOM, car il génère espace avant session_start()

Questions connexes