Comment puis-je supprimer les ï"¿ du début d'un fichier?

j'ai un fichier CSS qui a l'air bien quand je l'ouvre en utilisant gedit , mais quand il est lu par PHP( pour fusionner tous les fichiers CSS en un seul), ce CSS a les caractères suivants préprogrammés à elle: ï " ¿

PHP supprime tous les espaces blancs, donc un aléatoire ï " ¿au milieu du code gâche toute la chose. Comme je l'ai mentionné, Je ne peux pas réellement voir ces caractères lorsque j'ouvre le fichier dans gedit, donc je ne peux pas les supprimer très facilement.

j'ai googlé le problème, et il y a clairement quelque chose qui ne va pas avec l'encodage du fichier, ce qui est logique étant donné que j'ai déplacé les fichiers autour de différents serveurs Linux/Windows via ftp et rsync , avec une gamme d'éditeurs de texte. Je ne sais pas grand chose à propos de l'encodage des caractères, donc de l'aide serait appréciée.

si cela aide, le fichier est sauvegardé au format UTF-8, et gedit ne me laissera pas le sauvegarder au format ISO-8859-15 (le document contient un ou plusieurs caractères qui ne peuvent pas être encodés en utilisant le codage de caractères spécifié). J'ai essayé de le sauvegarder avec les terminaisons des lignes Windows et Linux, mais ni l'un ni l'autre n'a aidé.

119
demandé sur Peter Mortensen 2010-07-15 17:35:37

22 réponses

trois mots pour vous:

Marque d'Ordre des Octets (BOM)

c'est la représentation pour le BOM UTF-8 dans ISO-8859-1. Vous devez indiquer à votre éditeur de ne pas utiliser les Nomenclatures ou utiliser un autre éditeur de bande.

pour automatiser la suppression du BOM vous pouvez utiliser awk comme indiqué dans cette question .

comme une autre réponse dit , le mieux serait que PHP interprète effectivement le BOM correctement, pour que vous puissiez utiliser mb_internal_encoding() , comme ceci:

 <?php
   //Storing the previous encoding in case you have some other piece 
   //of code sensitive to encoding and counting on the default value.      
   $previous_encoding = mb_internal_encoding();

   //Set the encoding to UTF-8, so when reading files it ignores the BOM       
   mb_internal_encoding('UTF-8');

   //Process the CSS files...

   //Finally, return to the previous encoding
   mb_internal_encoding($previous_encoding);

   //Rest of the code...
  ?>
124
répondu Vinko Vrsalovic 2017-05-23 12:26:32

dans PHP , vous pouvez faire ce qui suit pour supprimer tous les non caractères, y compris le caractère en question.

$response = preg_replace('/[\x00-\x1F\x80-\xFF]/', '', $response);
21
répondu Michael Schreiber 2015-05-09 17:00:24

pour ceux qui ont accès à l'interpréteur de commandes voici une petite commande pour trouver tous les fichiers dont le BOM est défini dans le répertoire public_html - assurez-vous de le modifier en fonction de votre chemin correct sur votre serveur

Code:

grep -rl $'\xEF\xBB\xBF' /home/username/public_html

et si vous êtes à l'aise avec l'éditeur vi , ouvrez le fichier en vi:

vi /path-to-file-name/file.php

et entrer la commande pour supprimer le BOM:

set nobomb

Save le dossier:

wq
19
répondu Diego Palomar 2015-05-09 16:59:04

ouvrir votre fichier dans Notepad++ . À partir du menu encodage , sélectionnez convertir en UTF-8 sans BOM , enregistrer le fichier, remplacer l'ancien fichier avec ce nouveau fichier. Et il va travailler, sacrément sûr.

15
répondu V.Rohan 2015-05-09 17:18:15

BOM est juste une séquence de caractères ($EF $BB $BF pour UTF-8), alors il suffit de les supprimer en utilisant des scripts ou configurer l'éditeur pour qu'il ne soit pas ajouté.

à Partir de Retrait BOM UTF-8 :

#!/usr/bin/perl
@file=<>;
$file[0] =~ s/^\xEF\xBB\xBF//;
print(@file);

je suis sûr qu'il se traduit en PHP facilement.

11
répondu Eugene Yokota 2010-07-15 13:55:20

pour moi, cela a fonctionné:

<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />

si je supprime ce méta, le ï " ¿apparaît de nouveau. Espérons que cela aide quelqu'un...

6
répondu NickWebman 2014-11-12 18:53:33

Je ne connais pas PHP, donc je ne sais pas si c'est possible, mais la meilleure solution serait de lire le fichier en UTF-8 plutôt qu'un autre encodage. Le BOM est en fait une largeur zéro sans espace de pause. C'est un espace blanc, donc si le fichier était lu dans le bon encodage (UTF-8), alors le BOM serait interprété comme un espace blanc et il serait ignoré dans le fichier CSS résultant.

aussi, un autre avantage de lire le fichier dans le codage correct est que vous ne vous inquiétez pas si les personnages sont mal interprétés. Votre éditeur vous dit que la page de code que vous voulez sauvegarder ne fera pas tous les caractères dont vous avez besoin. Si PHP lit alors le fichier dans le codage incorrect, alors il est très probable que d'autres caractères que le BOM sont silencieusement mal interprétés. Utilisez UTF-8 partout, et ces problèmes disparaissent.

5
répondu Jeffrey L Whitledge 2010-07-15 14:10:28

vous pouvez utiliser

vim -e -c 'argdo set fileencoding=utf-8|set encoding=utf-8| set nobomb| wq'

Remplacement avec awk semble fonctionner, mais il n'est pas en place.

3
répondu till 2015-05-09 16:56:01

grep-RL $ '\xEF\xBB\xBF '* / xargs vim -e-c 'argdo set fileencoding=utf-8|set encoding=utf-8| set nobomb| wq'

2
répondu Simone 2013-11-29 14:13:23

j'ai eu le même problème avec le BOM apparaissant dans certains de mes fichiers PHP (ï"¿ï" ¿).

si vous utilisez PhpStorm vous pouvez définir à hotkey pour le supprimer dans les Paramètres -> Paramètres IDE -> Keymap -> Menu Principal - > Fichier -> Supprimer BOM.

2
répondu Toby 2015-05-09 16:57:17

dans le bloc-notes++, choisissez le menu" encodage", puis"Encoder en UTF-8 sans BOM". Puis enregistrez.

Voir Débordement de Pile question Comment faire pour que le bloc-notes pour enregistrer le texte en UTF-8 sans BOM? .

2
répondu Curtis Yallop 2017-05-23 12:34:38

ouvrir le fichier PHP sous question, dans Notepad++.

cliquez sur Encoding en haut et passez de "Encoding in UTF-8 without BOM" à "Encoding in UTF-8". Enregistrer et enregistrez le fichier sur votre serveur.

2
répondu Problem Solved 2015-10-21 06:55:54

même problème, solution différente.

une ligne dans le fichier PHP était l'impression des en-têtes XML (qui utilisent les mêmes balises begin/end que PHP). On dirait que le code dans ces tags a défini l'encodage, et a été exécuté dans PHP qui a donné les caractères étranges. En tout cas, voici la solution:

# Original
$xml_string = "&lt;?xml version=\"1.0\" encoding=\"UTF-8\"?&gt;";

# fixed
$xml_string = "<" . "?xml version=\"1.0\" encoding=\"UTF-8\"?" . ">";
1
répondu D G 2012-01-05 18:20:08

si vous devez être en mesure de supprimer le BOM des fichiers encodés UTF-8, vous devez d'abord mettre la main sur un éditeur qui est au courant d'eux.

personnellement, j'utilise E Éditeur de Texte .

en bas à droite, il y a des options pour l'encodage des caractères, y compris la balise BOM. Chargez votre fichier, désélectionnez le marqueur D'Ordre des octets s'il est sélectionné, résavez, et cela doit être fait.

Alt text http://oth4.com/encoding.png

E n'est pas libre, mais il ya un essai gratuit, et il est un excellent éditeur (limitée TextMate compatibilité).

1
répondu dmp 2015-05-09 16:52:55

Voici une autre bonne solution pour le problème avec BOM. Il s'agit de deux VBScript (.vbs) les scripts.

un pour avoir trouvé le BOM dans un fichier et un pour avoir tué le damné BOM dans le fichier. Il fonctionne très bien et est facile à utiliser.

il suffit de créer un .vbs fichier et collez le code suivant dans.

vous pouvez utiliser le script VBScript simplement en faisant glisser et en laissant tomber le fichier suspect sur le .vbs fichier. Il vous dira s'il y a un BOM ou pas.

' Heiko Jendreck - personal helpdesk & webdesign
' http://www.phw-jendreck.de
' 2010.05.10 Vers 1.0
'
' find_BOM.vbs
' ====================
' Kleines Hilfsmittel, welches das BOM finden soll
'
 Const UTF8_BOM = ""
 Const UTF16BE_BOM = "þÿ"
 Const UTF16LE_BOM = "ÿþ"
 Const ForReading = 1
 Const ForWriting = 2
 Dim fso
 Set fso = WScript.CreateObject("Scripting.FileSystemObject")
 Dim f
 f = WScript.Arguments.Item(0)
 Dim t
 t = fso.OpenTextFile(f, ForReading).ReadAll
 If Left(t, 3) = UTF8_BOM Then
     MsgBox "UTF-8-BOM detected!"
 ElseIf Left(t, 2) = UTF16BE_BOM Then
     MsgBox "UTF-16-BOM (Big Endian) detected!"
 ElseIf Left(t, 2) = UTF16LE_BOM Then
     MsgBox "UTF-16-BOM (Little Endian) detected!"
 Else
     MsgBox "No BOM detected!"
 End If

S'il vous dit QU'il y a BOM, allez créer le second .VBS fichier avec le code suivant et faire glisser le fichier suspicios sur le .fichier vbs.

' Heiko Jendreck - personal helpdesk & webdesign
' http://www.phw-jendreck.de
' 2010.05.10 Vers 1.0
'
' kill_BOM.vbs
' ====================
' Kleines Hilfmittel, welches das gefundene BOM löschen soll
'
Const UTF8_BOM = ""
Const ForReading = 1
Const ForWriting = 2
Dim fso
Set fso = WScript.CreateObject("Scripting.FileSystemObject")
Dim f
f = WScript.Arguments.Item(0)
Dim t
t = fso.OpenTextFile(f, ForReading).ReadAll
If Left(t, 3) = UTF8_BOM Then
    fso.OpenTextFile(f, ForWriting).Write (Mid(t, 4))
    MsgBox "BOM gelöscht!"
Else
    MsgBox "Kein UTF-8-BOM vorhanden!"
End If

le code est de Heiko Jendreck .

1
répondu NoEs 2015-05-09 17:06:20

même problème, mais il n'a affecté qu'un seul fichier donc je viens de créer un fichier vierge, copier/coller le code à partir du fichier original vers le nouveau fichier, puis a remplacé le fichier original. Pas de fantaisie, mais cela a fonctionné.

0
répondu jiminy 2014-04-30 20:39:43

Utiliser Total commander à la recherche pour tous les BOMed fichiers:

élégante façon de rechercher des fichiers UTF-8 avec BOM?

  • ouvrez ces fichiers dans un éditeur approprié (qui reconnaît BOM) comme Eclipse .

  • changez l'encodage du fichier EN ISO (clic droit, Propriétés).

  • Couper ï"¿ à partir du début du fichier, enregistrer

  • modifier l'encodage du fichier retour à UTF-8

...et ne pensez même pas à utiliser N...d encore une fois!

0
répondu Jan Przybylo 2017-05-23 12:18:20

vous pouvez l'ouvrir par PhpStorm et droit-cliquez sur votre fichier et cliquez sur Remove BOM ...

0
répondu behtateam 2015-05-09 16:59:44

j'ai eu le même problème. Le problème était que l'un de mes fichiers php était en utf-8 (le plus important, le fichier de configuration qui est inclus dans tous les fichiers php).

dans mon cas, j'ai eu 2 solutions différentes qui ont fonctionné pour moi:

tout d'abord, j'ai modifié la Configuration D'Apache en utilisant AddDefaultCharsetDirective dans les fichiers de configuration (ou in .htaccess). Cette solution oblige Apache à utiliser le bon encodage.

AddDefaultCharset ISO-8859-1

la deuxième solution était de changer le mauvais encodage du fichier php.

0
répondu SkaJess 2016-02-11 07:59:47
  1. Copiez le texte de votre nom de fichier.fichier css.
  2. fermez votre fichier css.
  3. le renommer filename2.css pour éviter un nom de fichier clash.
  4. dans MS Notepad ou Wordpad, créez un nouveau fichier.
  5. Coller le texte.
  6. Enregistrer sous nom de fichier.CSS, en sélectionnant UTF-8 à partir des options d'encodage.
  7. Upload de fichier.CSS.
0
répondu Benjamin 2017-12-12 18:42:48

dans PHPStorm, pour plusieurs fichiers et BOM pas nécessairement au début du fichier, vous pouvez rechercher \x{FEFF} (Expression régulière) et remplacer par rien.

0
répondu Guillaume Renoult 2018-02-22 03:43:12

le contrôle de votre index.php , trouver "... charset=iso-8859-1 "et le remplacer par"... charset=utf-8 ".

peut-être que ça marchera.

-3
répondu John Great 2015-05-09 16:58:02