Pb accent xml/php à la volée

Liz34 Messages postés 6 Date d'inscription mardi 7 décembre 2004 Statut Membre Dernière intervention 27 février 2011 - 24 févr. 2011 à 18:20
007Julien Messages postés 276 Date d'inscription mercredi 22 septembre 2010 Statut Membre Dernière intervention 8 janvier 2014 - 27 févr. 2011 à 23:35
Bonjour à tous,

après des heures de recherche infructueuse je me décide à demander de l'aide.
Précision : je suis débutante en php

J'utilise des xml qui sont traité par des xsl et parser à la volée par php, mon soucis c'est que j'ai des accents ou des apostrophes dans les tags. Si les accents ressortent correctement (contrairement aux apostrophes) le système ne semble pas les reconnaitre puisqu'il ne m'affiche rien. Et bien entendu, dès que j'enlève les accents tout fonctionne...
pour info site : www.restic.fr --> concept --> "acteur generalise" (relation) marche
alors que : www.restic.fr --> concept --> "acteur généralisé" (norme) marche PAS!!!

Quelqu'un a-t-il une solution?

PLEASE!!!!

8 réponses

007Julien Messages postés 276 Date d'inscription mercredi 22 septembre 2010 Statut Membre Dernière intervention 8 janvier 2014 4
25 févr. 2011 à 13:03
Hormis les accents sur généralisé, je ne vois pas de différence entre les pages citées ?
Ceci dit, il est souvent bon en PHP de spécifier le charset du language employé avec un header en tête
header("Content-Type: text/html; charset=iso-8859-1"); 
0
Liz34 Messages postés 6 Date d'inscription mardi 7 décembre 2004 Statut Membre Dernière intervention 27 février 2011
25 févr. 2011 à 20:23
J'ai dû mal m'exprimer, lorsqu'il n'y a pas d'accent cela fonctionne (il faut cliquer sur "relation" dans le menu de gauche pour voir apparaitre le texte), alors que lorsqu'il y a un accent php ou xslt ne semble pas vouloir récupérer les données balisées.
Et quand je teste ta solution ça me met ce message d'erreur :
Warning: Cannot modify header information - headers already sent by (output started at /homepages/21/d310769191/htdocs/restic/index.php:12) in /homepages/21/d310769191/htdocs/restic/fonctions.php on line 2

Une autre idée?
0
007Julien Messages postés 276 Date d'inscription mercredi 22 septembre 2010 Statut Membre Dernière intervention 8 janvier 2014 4
25 févr. 2011 à 23:17
Les accents et les espaces ne passent dans une adresse, il conviendrait d'«encoder» les paramètres de celles-ci avec la fonction urlencode() (voir aussi l'avertissement de urldecode() qui précise que le $_GET décode automatiquement).

Autrement dit en PHP, il convient de remplacer la 1ère chaîne par la suivante

href="concepts_fiche.php?concept=acteur généralisé&action=definitions";
href="concepts_fiche.php?concept=".urlencode("acteur généralisé")."&action=".urlencode("definitions");
0
007Julien Messages postés 276 Date d'inscription mercredi 22 septembre 2010 Statut Membre Dernière intervention 8 janvier 2014 4
25 févr. 2011 à 23:27
Quant au message d'erreur, il provient de l'impossibilité de modifier l'entête d'une page lorsque celle-ci a été au moins partiellement envoyée.

C'est une erreur courante parfois difficile à détecter (voir par exemple cette page).
0

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

Posez votre question
007Julien Messages postés 276 Date d'inscription mercredi 22 septembre 2010 Statut Membre Dernière intervention 8 janvier 2014 4
26 févr. 2011 à 10:59
Si les adresses ainsi obtenues paraissaient inesthétiques, une autre solution consisterait à construire une fonction supprimant les accents et remplaçant les espaces par des tirets-bas.

À condition de préserver les caractères spéciaux des adresses, cette fonction pourrait être appliquée à leur intégralité et non pas à chaque champ pris individuellement.

Attention toutefois aux solutions simplistes n'évoquant pas le jeu de caractère utilisé (voir par exemple cette page).
0
Liz34 Messages postés 6 Date d'inscription mardi 7 décembre 2004 Statut Membre Dernière intervention 27 février 2011
27 févr. 2011 à 21:03
Merci 007Julien d'essayer de m'aider!

Concernant ta première proposition (urlencode), je ne crois pas pouvoir l'utiliser car voici mon code xslt :
<?xml version= "1.0" encoding="ISO-8859-1"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
<xsl:output encoding="ISO-8859-1"/>

<xsl:param name="lettre"/>

<xsl:template match="liste">

<xsl:if test="count(concept[starts-with(translate(.,'abcdefghijklmnopqrstuvwxyz','ABCDEFGHIJKLMNOPQRSTUVWXYZ'),$lettre)])=0">
Il n'y pas de concept commençant par la lettre : <xsl:value-of select="$lettre"/>


</xsl:if>

<xsl:for-each select ="concept[not(. = preceding-sibling::concept[starts-with(translate(.,'abcdefghijklmnopqrstuvwxyz','ABCDEFGHIJKLMNOPQRSTUVWXYZ'),$lettre)])][starts-with(translate(.,'abcdefghijklmnopqrstuvwxyz','ABCDEFGHIJKLMNOPQRSTUVWXYZ'),$lettre)]">
<xsl:sort select="." order="ascending" data-type="text"/>
<xsl:variable name="concept_nom" select="."/>
<li> [concepts_fiche.php?concept={$concept_nom}&action=definitions <xsl:value-of select="."/>]</li>
</xsl:for-each>

</xsl:template>
</xsl:stylesheet>
0
Liz34 Messages postés 6 Date d'inscription mardi 7 décembre 2004 Statut Membre Dernière intervention 27 février 2011
27 févr. 2011 à 21:05
J'ai également essayé de remplacer les accents par des tirets mais sans succès...
0
007Julien Messages postés 276 Date d'inscription mercredi 22 septembre 2010 Statut Membre Dernière intervention 8 janvier 2014 4
27 févr. 2011 à 23:35
Bien que je ne connaisse absolument rien en xml ni xls la variable entre crochet $concept_nom me semble étrangement ressembler à une variable PHP.
Serait-il possible de définir la fonction suivante et de remplacer cette variable, là où elle est définie (et donc partout où elle intervient), par $sans_concept_nom=snsAccNiSpc($concept_nom); dans un bout de PHP?

// Fichier à enregistrer en iso-8859-1
<?php
header("Content-Type: text/html; charset=iso-8859-1");

function snsAccNiSpc($s){return strtr($s," àâçéèêëîïôùûüÀÂÇÉÈÊËÏÎÔÙÛÜ'","_aaceeeeiiouuuAACEEEEIIOUUU_");}

// À titre de test
$sans_concept_nom=snsAccNiSpc("le père Noël apporte des jouets à l'élève Édouard");
echo $sans_concept_nom;
?>
Je me suis limité aux accents français en ajoutant les espaces et apostrophes (premier et dernier caractères) à remplacer par des tirets bas. Les ligatures ne figurant pas dans l'ISO-8859-1 ne devraient pas poser de problèmes... Peut-être conviendrait-il cependant d'envisager l'utf-8 dès maintenant ?
0
Rejoignez-nous