Espace qui n'en est pas un

Fermé
Jolan - 19 avril 2013 à 12:09
 jolan - 19 avril 2013 à 20:54
Bonjour,
je fais des opérations sur des données mysql, et je rencontre des soucis à quelques rares espaces qui n'en sont pas. Pas moyen de faire le moindre traitement dessus, que ce soit en SQL ou en PHP, j'ai tenté d'encoder/décoder en utf8, de chercher les caractères spéciaux, etc. Et il y en a pour tous les goûts, j'ai tenté de remplacer à la barbare pour voir si cela avait de l'effet :
$object->$champs = str_replace(" ", "$", $object->$champs);
$object->$champs = str_replace(" ", "$", $object->$champs);
$object->$champs = str_replace("­", "$", $object->$champs);
$object->$champs = str_replace("­", "$", $object->$champs);
$object->$champs = str_replace("‎", "$", $object->$champs);
$object->$champs = str_replace("‎", "$", $object->$champs);
$object->$champs = str_replace("‏", "$", $object->$champs);
$object->$champs = str_replace("‏", "$", $object->$champs);
$object->$champs = str_replace(" ", "$", $object->$champs);
$object->$champs = str_replace(" ", "$", $object->$champs);
$object->$champs = str_replace(" ", "$", $object->$champs);
$object->$champs = str_replace(" ", "$", $object->$champs);
$object->$champs = str_replace(" ", "$", $object->$champs);
$object->$champs = str_replace(" ", "$", $object->$champs);
$object->$champs = str_replace("‌", "$", $object->$champs);
$object->$champs = str_replace("‌", "$", $object->$champs);
$object->$champs = str_replace("‍", "$", $object->$champs);
$object->$champs = str_replace("‍", "$", $object->$champs);
$object->$champs = str_replace(" ", "$", $object->$champs);
$object->$champs = str_replace("", "$", $object->$champs);
$object->$champs = str_replace("", "$", $object->$champs);
$object->$champs = str_replace("", "$", $object->$champs);
$object->$champs = str_replace("", "$", $object->$champs);
$object->$champs = str_replace("", "$", $object->$champs);

D'autres idées ?

8 réponses

Utilisateur anonyme
19 avril 2013 à 15:20
Bonjour

Au lieu de tâtonner, pourquoi n'affiches-tu pas les codes des caractères des données qui te posent des problèmes ? Tu verrais vite quels sont les caractères anormaux.

Au passage, ton écriture $object->$champs est mauvaise. C'est $objet->champ sans $ à champ. (Et sans s à champ au singulier)

$txt=$object->champ;
for ($k=0; $k<strlen($txt); $k++) echo ord($txt[$k]),' ';
0
Ce n'est pas un poblème d'écriture, mais simplement le framwork assez développé sur lequel je bosse qui fait cet écriture (la variable champs contenant tout simplement le nom de l'attribut, qui peut être n'importe quoi... traitement sur près de 5 000 tuples de données, plusieurs champs différents), mais si tu préfères, considère que c'est une variable quelconque, j'aurais dû simplifier.

Sinon, j'ai testé ta fonction sur une page de données, elle affiche une suite de nombre, est-ce ce que tu souhaitais ? Et qu'en faire ? Rien ne semble sortir de l'ordinaire, bien que ce soit illisible pour l'oeil. Que devrais-je constater exactement ?
0
Cette liste de nombres te permet de détecter "les espaces qui n'en sont pas" et dont tu te plains. Ma fonction n'a pas d'autre but. Mais je supposais que tu savais reconnaître le code d'un caractère espace normal de celui d'un caractère espace autre...
Tes espaces qui n'en sont pas sont peut être des espaces insécables (code160) au lieu des espaces habituelles (code 32). Si c'est bien ça, c'est très facile à 'réparer'

[edit] Pardon, en utf8, l'espace insécable c'est la suite 194 160
0
Non, l'espace insécable, j'ai déjà regardé, je n'en manque pas, mais ce n'est pas ce qui pose problème, c'est déjà réglé par mes fonctions de récupération. Dommage, j'aurais bien aimé que ce soit simplement ça.
Après, je ne peux pas tester chaque caractères pour voir ce que cela fait exactement, trop long. Mais justement, je demandais s'il n'y avait pas d'autres espaces ou éléments similaires aux espaces, espaces insécables, etc. J'ai aussi regardé les indentations, les marges gauches-à-droite, les liant sans chasse, etc. Ou alors quelque-chose, des caractères un peu foireux, qu'il est possible de trouver dans certaines bases de données.
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Utilisateur anonyme
19 avril 2013 à 18:22
En fait, en quoi consistent ces 'espaces qui n'en sont pas' ? Comment cela se traduit-il ? Si tu as un jeu de données qui présente le problème, tu dois bien pouvoir en isoler un morceau d'une longueur raisonnable, et ensuite c'est très facile d'examiner les codes des caractères. Tu ne peux pas en donner un exemple ?
0
En clair, il y a des espaces dans certains des textes, qui s'affichent clairement comme des espaces dans les navigateurs/phpmyadmin etc (je récupère un jeu de test par copié coller, je n'ai aucun soucis, ça passe mes méthodes de refactoring). En revanche, quand j'exploite directement ce qui m'est retourné par la base de donnée, que ce soit par des méthodes php ou bien directement dans la base par des requêtes, ces espaces sont purement et simplement... non reconnu ? Exemple, je fais un str_replace sur un texte, et remplace par '$', tous mes espaces seront remplacés (je prends aussi les espaces insécables), sauf quelques rares espaces... qui restent là. Et une recherche sql, php, peu importe... fait comme s'il n'y en avait pas. Et cela empêche l'exploitation correcte des données, car ils y sont bel et bien (et je ne vais pas parcourir les 3 champs des 2 000 tuples compromis pour remplacer ces espaces à la main :/).
0
Tu peux bien isoler un tuple qui présente ce problème et afficher les codes donnés par le script que je t'ai fourni ? On saura exactement ce qui ne va pas dans les données, ça me semble simple.

Question supplémentaire : travailles-tu en utf-8 ou en iso8859-1 ou autre chose, ou un mélange de tout ça ?
0
Je verrais ça lundi, je pensais déjà tenter ça, quand j'aurais eu du temps entre deux autres demandes ^^.
Merci pour ton aide quand-même. Je ne pensais pas qu'une méthode pouvais les afficher directement. Je dirais lundi si ça a résolu ou non le problème.
0