89 votes

Sortie PHP affichant des petits losanges noirs avec un point d'interrogation

Je suis en train d'écrire un programme php qui tire des données d'une base de données. Je ne sais pas si je peux me permettre de le faire, mais je ne sais pas non plus si je peux me permettre de le faire, CARACTÈRE DE REMPLACEMENT (je suppose qu'il s'agit d'un texte Microsoft Word).

Comment puis-je utiliser php pour supprimer ces caractères ?

1voto

Skylark Roman Points 56

Lorsque vous extrayez des données de n'importe où, vous devez utiliser des fonctions avec le préfixe md_FUNC_NAME .

J'ai eu le même problème et cela m'a aidé.

Vous pouvez également trouver le code de ce symbole et utiliser une expression rationnelle pour supprimer ces symboles.

0voto

powtac Points 18619

Vous pouvez également modifier le jeu de caractères dans votre navigateur. Juste pour des raisons de débogage.

0voto

GrafixGuy Points 1

L'utilisation du même jeu de caractères (comme suggéré ici) dans la base de données et dans le code HTML n'a pas fonctionné pour moi... Donc, en me rappelant que le code est généré en tant que HTML, j'ai choisi d'utiliser le format " (code HTML) ou le " (code ISO Latin-1) dans le texte de ma base de données où des guillemets ont été utilisés. Cela a résolu le problème tout en me fournissant un guillemet. Il est étrange de constater qu'avant cette solution, seuls certains guillemets et apostrophes ne s'affichaient pas correctement, alors que d'autres s'affichaient correctement, mais le code spécial fonctionnait dans tous les cas.

0voto

drtechno Points 143

J'ai exécuté le code "detect encoding" après mon changement de collation dans phpmyadmin et il apparaît maintenant comme Latin_1.

mais voici ce que j'ai découvert en observant une autre anomalie de données dans mon application et comment j'y ai remédié :

Je viens d'importer un tableau qui a un encodage mixte (avec des points d'interrogation en forme de diamant dans certaines lignes, et tous étaient dans la même colonne) donc voici mon code de correction. J'ai utilisé le processus utf8_decode qui prend le placeholder indéfini et assigne un point d'interrogation simple à la place du "diamond question mark" puis j'ai utilisé str_replace pour remplacer le point d'interrogation par un espace entre guillemets. Voici le code [code]

    include 'dbconnectfile.php';

  //// the variable $db comes from my db connect file
   /// inx is my auto increment column
   /// broke_column is the column I need to fix

      $qwy = "select inx,broke_column from Table ";
      $res = $db->query($qwy); 

      while ($data = $res->fetch_row()) {
      for ($m=0; $m<$res->field_count; $m++) {
           if ($m==0){ 
           $id=0;
           $id=$data[$m];
       echo $id;
           }else if ($m==1){ 
             $fix=0;
             $fix=$data[$m];

             $fix = utf8_decode($fix);
             $fixx =str_replace("?"," ",$fix);

        echo $fixx;

        ////I echoed the data to the screen because I like to see something as I execute it :)
            }
            }
         $insert= "UPDATE Table SET broke_column='".$fixx."'  where inx='".$id."'";
          $insresult= $db->query($insert);
      echo"<br>";
        }

        ?>

0voto

vivoconunxino Points 2613

À des fins globales.

Au lieu de convertir, codifier, décoder chaque texte, je préfère les laisser tels quels et modifier les paramètres php du serveur. Ainsi,

  1. Laissez les diamants

  2. Dans le navigateur, dans le menu Affichage, sélectionnez "encodage du texte" et trouvez celui qui vous permet de voir votre texte correctement.

  3. Editez votre php.ini et ajoutez :

    default_charset = "ISO-8859-1"

ou, au lieu d'ISO-8859, celui qui correspond à l'encodage de votre texte.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X