Bonjour, j'aurai besoin d'un peu d'aide la car je cale totalement depuis deux jours.

J'essaye de transformer une page via le moteur xsl par défaut de php5 (apparement une implantation de lib_xslt).

Malheureusement il en ressort des erreurs pour chaque entité rencontré.
J'ai facilement trouvé avec un peu de recherche que les seules entités de bases étaient « <>?"' » et qu'en l'abscence de DTD qui s'en chargeait il fallait s'en occuper nous même, ce que j'ai fait.

Maintenant je n'ai plus d'erreur, mmais je n'ai plus de caractères spéciaux non plus : ils tombent tout simplement dans les limbes du moteur xsl et n'arrivent jamais à destination.

Voila comment je procède :


<?xml version="1.0" encoding="ISO-8859-1"?>
<!DOCTYPE xsl:transform [
	<!ENTITY % HTMLlat1 PUBLIC
		"-//W3C//ENTITIES Latin 1 for XHTML//EN"
		"http://www.w3.org/TR/xhtml1/DTD/xhtml-lat1.ent">
	%HTMLlat1;
]>

<xsl:transform version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output
	method="xml" omit-xml-declaration="yes"
	doctype-public="-//W3C//DTD XHTML 1.0 Strict//EN"
	doctype-system="http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"
	media-type="text/html" encoding="ISO-8859-1"
	indent="yes" />

<xsl:template match="/">
	<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="fr">
	<head>
	<title>Titre</title>
	</head>
	<body>
		<p>ce paragraphe contient des caract&egrave;res accentu&eacute;s</p>
	</body>
	</html>

</xsl:template>

</xsl:transform>


Et voici la sortie que j'obtient :

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="fr" lang="fr">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1" />
<title>Titre</title>
</head>
<body>
	<p>ce paragraphe contient des caractres accentus</p>
</body>
</html>


Une idée ?
Bien sûr autre que ne pas utiliser d'entités ou utiliser des entités unicode : trop de personnes interviendront sur ce projet et quelqu'un y mettra forcément à un moment ou un autre une entité.

Merci beaucoup !

PS : ça vous dirait pas un textarea un peu plus grand ? car la on ne voit même pas ce qu'on écrit...
Il faut activer explicitement le support pour les entités dans le processeur XSLT avec:
$xsl->substituteEntities = TRUE;
Bon j'ai réussi à trouver la solution.
C'est un peu une constante chez moi : bloquer pendant des heures voir des jours > se décider à trouver de l'aide > trouver la solution dans les 5 minutes qui suivent.

Ca m'arrive tellement souvent... la prochaine fois j'essayerai même plus de chercher je posterai tout de suite pour avoir l'éclair de génie qui va avec. xD

Bon pour les curieux le problème se trouve au niveau de php (et oui encore lui, déjà que je l'aime pas lui et sa syntaxe boiteuse, mais en plus c'est réciproque) qui trouve bon de ne parser que ce qu'il a envie sauf si on lui spécifie expressement le contraire. Après tout c'est logique vous lui soumettez un docuùent ce n'est pas pour qu'il le traite entièrement ! Faudrait pas abuser non plus.
Donc la commande magique est :


$doc->substituteEntities = true;


Monsieur php à quand des méthodes "processCData", "processPCData" et "processWhiteSpace", non car la franchement c'est du travail baclé : faut assumer et garder sa logiqu'au bout.

EDIT : merci nimbustier, si seulement ça aurait pu venir il y a deux jours et m'éviter une nuit blanche et je serai un peu moins aigri...
Modifié par Ywg (01 Dec 2007 - 22:15)