accent, caractères spéciaux, strtr [php] - PHP - Programmation
Marsh Posté le 20-11-2004 à 11:00:30
Alors, même pas une petite piste pour m'aider.
Même un lien vers un bon tutoriel vers les regex serait le bienvenu.
Marsh Posté le 20-11-2004 à 11:37:33
T'as pas spécialement besoin de regex, utilise plutot des fonctions comme strtr.
Marsh Posté le 20-11-2004 à 11:48:47
strtolower()
str_replace()
Marsh Posté le 20-11-2004 à 11:54:16
Minuscule :
strtolower
Pour virer les accents (il y a peut-être pas tout) :
Code :
|
Pour virer les espaces tu peux écrire :
Code :
|
Enfin pour virer les non alphanum (non testé ) :
Code :
|
Marsh Posté le 20-11-2004 à 12:43:12
Merci beaucoup, il ne me reste plus qu'à tester ça.
Pour les accentes j'ai trouver ça :
Code :
|
Marsh Posté le 20-11-2004 à 12:49:29
Je dirai plutot "eregi_replace" plutot que "ereg_replace" (insensible à la casse).
Enfin tout dépend de l'ordre de ton traitement, car après un strtolower() c'est moins important.
Marsh Posté le 21-11-2004 à 12:16:35
Rebonjour,
J'ai éssayé, bidouillé, modifié...
Ca ne fonctionne pas correctement avec les accents.
Voici la partie du code que j'ai refais :
Code :
|
Le résultat est le suivant :
Code :
|
Pour la casse, je me suis arrangé au niveau de l'url rewriting, mais pour les accents... Rien à faire, ça ne veux pas.
Une idée (peut-être au niveau de l'url rewriting)?
Marsh Posté le 21-11-2004 à 12:48:43
Apparemment tu aurais des entités html dans ta base (é). Comment ça se fait ?
T'as pas un lien vers ton site ?
Marsh Posté le 21-11-2004 à 13:10:34
Très intérréssant ta remarque, je n'y pensais plus à mes entités...
Le site est valid xhtml1.1, par conqéuent, j'éssaye de remplacer tout les caractères accentués par leur entité.
L'adresse du site :
http://www.eurotchat.info
Il faut regarder en bas de la page pour les news.
Marsh Posté le 21-11-2004 à 13:14:29
En fait, l'idée est d'avoir tes données dans la base utilisant le jeu de caractères "normal". La conversion des entités html intervenant lors de l'affichage avec des fonctions comme htmlentities().
Marsh Posté le 21-11-2004 à 13:20:29
Uhm, UHm, en gros, j'écris normalement mes news avec les accents. Ensuite, je supprime les accents pour mettre le titre dans l'url et en même temps, je convertit les accents en entité pour les titres sur la page.
Allez, c'est partit, on va tester ça !
PS : pour parler d'url rewriting, c'est dans quel forum ?
Edit : je viens de remplacer mes entités par leur équivalent accentué dans ma base et voilà le résultat :
Code :
|
Marsh Posté le 21-11-2004 à 17:21:04
Je viens d'y penser, un exemple concret : http://forum.hardware.fr/hardwaref [...] 0250-1.htm
http://forum.hardware.fr/hardwaref [...] 0250-1.htm
Le titre est dans l'url contient le titre de la page. C'est exactement ce que je veux faire. Le titre à été "nettoyé".
Marsh Posté le 21-11-2004 à 17:43:33
Ok, pour récupérer la chaine venant de l'url en clair tu fais un rawurldecode().
Sinon, pourquoi passes-tu le texte du titre dans l'url ? Tu n'as pas d'id numérique ?
Marsh Posté le 21-11-2004 à 17:57:56
Enfaite, je ne récupère pas la chaine provenant de l'url, c'est un peux l'inverse.
En réalité(je vais éssayer d'être clair) : j'ai normalement une adresse de départ du type :
index.php?go=news&id=2 où news ne change pas et 2 est le numéro de la news qui change à chaque news.
Ce que je veux obtenir grave à php et à l'url rewriting :
news-2-le_titre_de_la_news.html
Pour celà, j'ai mis en place une règle de réécriture qui est :
Code :
|
Au niveau php, je creéer le lien avec l'id et puis je rajoute le titre de "épuré" de la news dans l'adresse. Un peu comme ce forum. tester ces deux url :
Code : |
Je pense qu'il n'y a que "60250-1" qui est pris en compte, moi c'est éxactement pareil.
Marsh Posté le 21-11-2004 à 18:15:04
T'as essayé de faire des echo à chaque étape du traitement de $titre ?
Marsh Posté le 21-11-2004 à 18:22:46
Aller c'est partit on va voir ce que ça donne :
Code :
|
la fonction est
Code :
|
le résultat est disponible(en bas) sur http://www.eurotchat.info pour vous rendre vraiment compte. le deuxième lien fonctionne car pas d'accents et le premier déconne.
Marsh Posté le 21-11-2004 à 18:28:00
Chez moi :
Code :
|
fonctionne parfaitement...
Tu as vérifié ce que tu avais dans la base ?
Marsh Posté le 21-11-2004 à 18:40:42
Oula ça m'énerve cette histoire
Voici le contenu de ma base de news :
Code :
|
Voici ensuite le CS de ma page consacré aux news que j'ai modifié pour qu'il soit comme pascal_
Code :
|
La source n'est pas éxactement la même mais j'ai mis sur le site un echo avec le nom de la ligne correspondante sur http://www.eurotchat.info
J'arrive à accédder aux news en ayant modifié les règles d'écriture, mais les caractères accentués ne sont pas remplacés, ils sont supprimés.
Marsh Posté le 21-11-2004 à 18:50:37
Ton éditeur de texte, il serait pas Unicode par hasard ?
Essaye avec un encodage ISO-8859-1 dans ton code html.
Marsh Posté le 21-11-2004 à 19:15:50
Je suis en UTF-8 Pour tout le site.
on va voir en 8859-2 ( j'ai pas le 1)
c'est correct pour l'url mais plus pour le titre original.
Et surtout, la page n'est plus valid xhtml
Citation : Sorry, I am unable to validate this document because on line 68 it contained one or more bytes that I cannot interpret as utf-8 (in other words, the bytes found are not valid values in the specified Character Encoding). Please check both the content of the file and the character encoding indication. |
Marsh Posté le 21-11-2004 à 19:21:19
Essaye le iso-8859-15 (si tu l'as). Le truc avec le charset est qu'il soit cohérent tout au long de ta chaine de données.
Base de donnée, pages html, header html.
Marsh Posté le 21-11-2004 à 19:26:17
Mais le site est TOUT en UTF-8
Et en UTF-8, les accents... En plus je n'ai pas le jeu 8859-15...
Il faudrais que je prenne le problème dans un autre sens :
transformé les entité html en leur équivalent accentué pui les "désaccentué"....
Bien compliqué tout ça.
Marsh Posté le 21-11-2004 à 19:32:37
Il y a une incohérence de charset quelque part, j'ai forcé le charset iso-8859-1 dans IE et la page s'affiche correctement.
Marsh Posté le 21-11-2004 à 19:37:02
Je pense que je vais revoir ça de fond en comble mais dans le sens inverse le wk prochain.
En tout cas, merci de votre aide.
Pour les charset, je suis en UTF-8 partout mais l'utf-8 n'interprete pas les accents...
Marsh Posté le 21-11-2004 à 20:07:34
Voici ma nouvelle stratégie :
- J'écris dans ma bd, les titres avec les entités html ;
- Je récupère mes titres ;
- Je convertit mes entités avec leur équivalent accentué ;
- Je transforme mes caratères accentés en leur équivalent non accentué ;
- Je transforme les espaces en _.
Facile à dire, j'attaqueeeeeeeeeee
Marsh Posté le 21-11-2004 à 20:12:28
Dans ta base n'écrit pas les entités html équivalentes aux caractères accentués, écrit tes caractères normalement.
Marsh Posté le 21-11-2004 à 20:31:07
Je fais le test avec ls entités normales, voici le contenu d'une partie de la table :
Code :
|
Regardez le résultat sur http://www.eurotchat.info/indedx.php
La news avec tout les accents est horrible....
Et en utilisant :
Code :
|
Marsh Posté le 22-11-2004 à 17:33:48
Alors pas de nouvelles idées ?
Peut-être mettre le site en iso-8859-2 à la place de UTF-8 ?
Marsh Posté le 22-11-2004 à 18:47:50
opgang a écrit : Alors pas de nouvelles idées ? |
Dans ton code source tu remplaces
Code :
|
par
Code :
|
Assure toi que ce n'est pas forcé par le serveur aussi.
Sinon quels sont tes charsets au niveau de la base, du code de tes pages (éditeur) ?
Marsh Posté le 22-11-2004 à 19:11:50
Nomalemnt je suis tout sous UTF-8 sous mon éditeur(PSPAD).
Je ne pense pas que le server force le charset car la page est bien valid avec UTF-8.
Je vais tester ce wk avec iso-8859-2 pour voir ce que ça fait.
Marsh Posté le 25-11-2004 à 18:35:58
j'ai tout passé en iso, mais ça ahcnge pas grand chose....
j'ai ajouté ce-ci mais ça ne fonctionne pas :
Code :
|
Une idée ?
Marsh Posté le 25-11-2004 à 18:41:40
opgang a écrit : |
oui
Code :
|
Marsh Posté le 25-11-2004 à 18:42:35
L'accent dans l'url ? (ouverture du réseau)
En tout cas, tes caractères de pages sont affichés correctement...
Marsh Posté le 25-11-2004 à 18:45:50
simogeo a écrit : oui
|
Justement, comme ça ne fonctionne pas avec ça j'ai éssayé avec array().
Mais là, je me demande vraiment d'où viens le problème.....
Marsh Posté le 25-11-2004 à 18:49:01
opgang a écrit : Justement, comme ça ne fonctionne pas avec ça j'ai éssayé avec array(). |
oui mais non. Ce script fonctionne.
S'il y a encore des erreurs, leproblème vient de l'encodage de tes données !
Marsh Posté le 25-11-2004 à 18:56:21
j'y ai pensser, j'a passé tous le site en iso-8859-2 à la place de UTF-8 qui déconne avec les accents... Mais le résultat demeur le même...
Comment dénicher ce problème d'encodage ?
Marsh Posté le 25-11-2004 à 19:03:53
opgang a écrit : j'y ai pensser, j'a passé tous le site en iso-8859-2 à la place de UTF-8 qui déconne avec les accents... Mais le résultat demeur le même... |
Le problème serait plutôt des données dans ta base de données. Tous les scripts donnés ici fonctionnent...
Marsh Posté le 25-11-2004 à 19:08:14
Et comment par exemple avec phpMyAdmin 2.6.0-pl2, s'assurer d'insérer des caractères sous iso-8859-2 ?
J'ai beau le trifouiller....
Marsh Posté le 25-11-2004 à 19:10:07
Donne les valeurs de ces variables mysql:
character set client |
Marsh Posté le 19-11-2004 à 18:03:57
Bonjour à tous,
après avoir récurer google, je ne trouve toujours pas réponse à mon problème.
Je désire tranformé une chaîne de caractères en chaine de caractères sans caractères spéciaux, ni accent et avec les expaces en _.
Pour les espaces, j'ai trouvé(pas vraiment en réalité) à pour les espaces :
Maintenant je cherche pour mofifier la casse.
Et le pire, remplacer les lettres accentuées par leu "équivalent non accentué"
Et enfin, viré les characctères non alphanumérique.
Merci
Message édité par opgang le 21-11-2004 à 12:26:07
---------------
Allez viens :p http://www.eurotchat.info