Laravel 5 charset ne fonctionne pas correctement sur les points de vue. Mais il fonctionne bien quand j'ai un dump de contrôleur
Je suis confronté à un problème de charset ici. Je suis de développer une application qui utilise une base de données sql server. La base de données n'a pas été créé pour cette application, il existe avant elle et qui fonctionne très bien. Je ne peux pas changer quoi que ce soit sur la base de données parce que sa trop grande et il est utilisé par de nombreuses autres applications.
J'ai fini la auth de mon laravel 5 app, donc je vais créer une vue et de montrer dans cette optique, le nom de l'utilisateur. Le nom est: ADMINISTRADOR DA ACENTUAÇÃO. Il utiliser certains caractères spéciaux.
De mon point de vue:
{!!Auth::user()->name!!}
il montre:
ADMINISTRADOR DA ACENTUA��O
Mais dans mon contrôleur, avant de me remettre à la vue, j'ai fait:
die(\Auth::user()->name);
et il me montre:
ADMINISTRADOR DA ACENTUAÇÃO
J'essaie maintenant de le faire dans mon fichier de vue:
{!!Auth::user()->name!!}
<?php die();
Et cela fonctionne bien. Il me montre:
ADMINISTRADOR DA ACENTUAÇÃO
Il me fait croire que l'erreur occours pour quelque chose de laravel après les points de vue sont analysées.
Je ne sais pas pourquoi elle fonctionne bien quand je mourrai, le nom d'utilisateur sur le contrôleur, mais ne fonctionne quand je l'écho de son nom dans la vue.
Quelqu'un peut m'aider plz?
PS:
- Mon fichier de vue est à l'aide de charset utf8
- J'ai essayé de faire écho avec et sans les balises html et le jeu de caractères meta. Le problème occours sur les deux cas
- J'ai essayé de supprimer mon fichier de vue et en créer un nouveau avec charset utf8. Il ne fonctionne pas.
- J'ai essayé d'utiliser
<?php echo Auth::user()->name; ?>
au lieu de la lame de balises. Il ne fonctionne pas.
J'ai essayé de convertir mes fichiers, j'ai essayé même de les supprimer et de créer un nouveau fichier de vue en utilisant le charset utf8. Mais ça ne fonctionne pas.
Ce que votre base de données a comme jeu de caractères? La balise Meta ensemble dans la vue?
Le meilleur moyen de vérifier ce qui se passe est de vérifier ce qui est de l'encodage de votre chaîne avec
mb_detect_encoding($str)
, assurez-vous que c'est de l'utf-8. Notez également que die()
et echo
pourrait avoir des comportements différents. Je me souviens qu'à un moment, quand j'ai utilisé die
le contenu a été imprimé correctement dans le navigateur, mais seulement parce que le navigateur a été la gestion de la conversion. Un pas-si-bon-fix est d'utiliser quelque chose de convertir vos chaînes de caractères en UTF8 (cochez cette réponse)Avez-vous essayé dans les différents navigateurs? Aussi, existe-il des caractères spéciaux, plus tard, dans la vue que sont en train de forcer le navigateur à utiliser un jeu de caractères différent? Peut-être une apostrophe type sur un Mac, ou quelque chose comme ça?
OriginalL'auteur Anderson Silva | 2015-05-22
Vous devez vous connecter pour publier un commentaire.
J'ai résolu ce problème en utilisant cette aswer. J'ai juste allé dans mon AppServiceProvider et de le mettre en mode de démarrage:
Je ne sais pas si c'est la bonne façon de le faire, mais cela fonctionne pour moi.
??
des points d'interrogationOriginalL'auteur Anderson Silva
Généralement collent UTF-8 garde de la vie simple.
Être super prudent de copier et coller à partir de n'importe où ailleurs dans votre code - en fait toujours passer par Notepad++ et utiliser ses convertir en UTF-8 (sans BOM) avant de le copier et de le coller dans votre code.
Première question - comment les données dans votre base de données?
Mega Tip Top
Si vous êtes à l'aide d'un formulaire, assurez-vous que vous avez mis accepté charset l'attribut de l'élément de formulaire:
Alors assurez-vous que tous vos points de vue (y compris les pages d'erreur), ont
Ou le suivant si vous êtes en train de faire HTML4
Si vous avez accept-charset dans le formulaire ? C'est le navigateur de faire la conversion en UTF-8 pour vous avant que les données du formulaire est soumis
Je n'étais pas à l'aide de n'importe quelle forme. J'étais juste en écho avec le nom de l'utilisateur sur l'écran..
Me semble que le problème est que vous avez 'mal' les données codées dans la base de données - c'est là le problème qui s'est passé - à l'aide de utf8_encode() de la vue est un collage de plâtre, pas une solution. Assurez-vous que vous avez accept-charset sur tous vos formes et vous ne devriez pas avoir de merde de données dans le mauvais caractère. 😉
juste assez - c'est à propos de la seule situation où faire utf8_encode() dans la vue est la bonne chose à faire pour combler les lacunes de l'autre les applications, si elles ne sont pas l'application d'un fixe characterset. Attention si vous le faites tout de l'API ainsi, depuis API clients s'attendent à ce uniforme de codage des caractères de sorte que vous aurez probablement besoin explicitement utf8.
OriginalL'auteur Dave Amphlett
Depuis le succès et la réponse d'erreur ne se comportent pas de façon constante, la différence peut être dans les en-têtes HTTP. Si c'est le cas, ce qui se passe est que Sqlserver et votre navigateur utiliser le même encodage, probablement une valeur par défaut de Windows, comme cp1252, tandis que Laravel est configuré de manière à répondre avec un jeu de caractères différent de celui utilisé dans la base de données.
Vérifier l'en-tête HTTP content-type à la fois lorsque vous appelez le point de vue et quand vous mourrez() - si c'est votre question configurer Laravel pour envoyer de l'en-tête qui est d'accord avec les templates de votre site et de votre base de données de codage (ou bien sûr! transcoder explicitement en cas de besoin)
OriginalL'auteur Raffaele
Par accident, j'ai ouvert mon
UTF-8
fichier encodé dans différentes éditeur de texte et enregistrés. Cependant, il est automatiquement enregistré monUTF-8
fichierANSII
. Je me suis donc d'ouvrir à nouveau le fichier et enregistrez le fichier en tant queUTF-8
codé.OriginalL'auteur Fusion