IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C Discussion :

Remplacer tous les caractères html d'une page


Sujet :

C

  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    12
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 12
    Points : 8
    Points
    8
    Par défaut Remplacer tous les caractères html d'une page
    Bonjour à tous,
    je cherche à remplacer tous les caractères codés html ("é", etc.) par l'équivalent lisible ("é", etc.).
    Quelqu'un a une idée d'une lib en C qui le fait?
    Merci

  2. #2
    Expert éminent sénior
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 67
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Points : 20 985
    Points
    20 985
    Par défaut
    Citation Envoyé par anihat Voir le message
    Bonjour à tous,
    je cherche à remplacer tous les caractères codés html ("é", etc.) par l'équivalent lisible ("é", etc.).
    Quelqu'un a une idée d'une lib en C qui le fait?
    Merci
    Ca existe sûrement, mais c'est tellement plus amusant de le faire soit même...

  3. #3
    Membre éclairé Avatar de |PaRa-BoL
    Profil pro
    Inscrit en
    Novembre 2003
    Messages
    738
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France

    Informations forums :
    Inscription : Novembre 2003
    Messages : 738
    Points : 876
    Points
    876
    Par défaut
    Tellement oui...

    Tien j'ai fait une fonction pour remplacer des caractères :


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
     
    void str_replace(char *quoi, char *parquoi, char *content, char *buf)
    {
    	int i, x, s = 0;
     
    	if (strlen(quoi) > strlen(content) || strlen(parquoi) > strlen(content)) {
    		return;
    	}
    	sprintf(buf, "%s", content);
    	for (i = 0; i < strlen(content); i++) {
    		for (x = 0; x < strlen(quoi); x++) {
    			if (quoi[x] == content[i+x]) {
    				s = 1;
    			} else {
    				s = 0;
    				break;
    			}			
    		}
    		if (s == 1) {
    			memcpy(buf + strlen(content) - strlen(&content[(i+x)-strlen(quoi)]), parquoi, strlen(parquoi));
    			memcpy(strlen(parquoi) + buf + strlen(content) - strlen(&content[(i+x)-strlen(quoi)]), &content[(i+x)], strlen(&content[(i+x)-strlen(quoi)]));
    		}
    	}
    }

  4. #4
    Membre expérimenté
    Avatar de Gruik
    Profil pro
    Développeur Web
    Inscrit en
    Juillet 2003
    Messages
    1 566
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Juillet 2003
    Messages : 1 566
    Points : 1 729
    Points
    1 729
    Par défaut
    Omg...

    Bon les enfants, les traitements sur les chaines, c'est pas simple.. Pour des fonctions de transformation de chaines, faut définir où on va ecrire les caracteres, si c'est à l'appellant de preparer la zone de sortie ou à la fonction. De ça depend comment on va s'organiser pour utiliser une telle fonction. Si on croit avoir fait une fonction generique qui est utile dans tous les cas, on se fourre le doigt dans l'omoplate jusqu'à l'iris car ça impliquerait de devoir se plier aux exigences de la dite fonction dans certains cas.
    Ainsi, il n'y a pas 1 fonction de remplacement de chaines dans une chaine, il y en a 72. Enfin ça c'est vrai si on a des considerations sur l'optimisation. Yen a beaucoup moins si on se fiche des traitements inutiles qui peuvent être faits (mais c'est pas mon cas).

    A part ça, je releve quelques erreurs dans la fonction de ParaBol :
    - des strlen() à tout va => implique de reparcourir la chaine concernee à chaque fois. Ce n'est pas comme dans d'autres langages où les objets chaines disposent d'un attribut "length" ou d'une methode length() qui clairement se contentent de recuperer un attribut interne sans reparcourir la chaine.
    - seuls les caractères pointés par buf sont modifiés, les autres non. Les autres paramètre "char *" devraient plutot etre "const char *". Cela permettrait de passer une chaine litterale (les expressions entre guillemets) dans un des trois premiers paramètre.
    - j'ai un peu lu en diagonale, mais j'ai des doutes sur le fait qu'il ya des chaines valides dans buf (pas de \0, ou pas au bon endroit).

  5. #5
    Membre éclairé Avatar de |PaRa-BoL
    Profil pro
    Inscrit en
    Novembre 2003
    Messages
    738
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France

    Informations forums :
    Inscription : Novembre 2003
    Messages : 738
    Points : 876
    Points
    876
    Par défaut
    des strlen() à tout va => implique de reparcourir la chaine concernee à chaque fois
    Merci, pas fait attention, erreur que je fait fréquemment

    j'ai un peu lu en diagonale, mais j'ai des doutes sur le fait qu'il ya des chaines valides dans buf (pas de \0, ou pas au bon endroit).
    Je recopi dans "buf" la variable "content", toute les autres (quoi, parquoi) contiennent forcément le \0 final.

    Donc quoi qu'il arrive la chaine "buf" sera valide

  6. #6
    Membre expérimenté
    Avatar de Gruik
    Profil pro
    Développeur Web
    Inscrit en
    Juillet 2003
    Messages
    1 566
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Juillet 2003
    Messages : 1 566
    Points : 1 729
    Points
    1 729
    Par défaut
    Oui mais tu copies pas le \0 de "pourquoi" par exemple
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    memcpy(buf + strlen(content) - strlen(&content[(i+x)-strlen(quoi)]), parquoi, strlen(parquoi));
    Si tu voulais aussi copier le \0 de "pourquoi" faudrait prendre "strlen(pourquoi) + 1"

  7. #7
    Membre éclairé Avatar de |PaRa-BoL
    Profil pro
    Inscrit en
    Novembre 2003
    Messages
    738
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France

    Informations forums :
    Inscription : Novembre 2003
    Messages : 738
    Points : 876
    Points
    876
    Par défaut
    Non car là, la chaine s'arreterai après le remplacement.

Discussions similaires

  1. Réponses: 7
    Dernier message: 05/04/2011, 19h13
  2. [RegEx] remplacer tous les caractères accentués d'une chaine
    Par Alexdezark dans le forum Langage
    Réponses: 6
    Dernier message: 13/11/2009, 12h47
  3. [RegEx] caractère pour remplacer tous les caractères dans une regex
    Par sp2308 dans le forum Langage
    Réponses: 6
    Dernier message: 09/02/2008, 01h06
  4. Réponses: 13
    Dernier message: 09/01/2008, 01h32
  5. Réponses: 5
    Dernier message: 04/12/2007, 11h00

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo