Ernestine Posté 30 Septembre 2003 Posté 30 Septembre 2003 Bonjour, J'essaie de faire une mini-version de mon site pour le WAP, or je suis confrontée à deux problèmes qui sont des questions de php (je pense). 1/ Les accents. Pour que mes pages s'affichent correctement, il faut que je code les accents "en brut". C'est à dire pas de "é", ni de "à" : ceux-ci ne s'afficheraient pas. Or dans ma base de données, tous les articles sont écrits avec le codage standard des accents. Il me faudrait donc une fonction qui transforme toutes les lettres accentuées codées en lettres accentuées brutes. Par exemple : $mot = "Général"echo fonction($mot); //La chaine devient Général Cette fonction serait en fait l'inverse de la fonction htmlentities. 2/ Quand une page est trop longue pour le WAP, le chargement se coupe. Il faudrait donc que je découpe chaque page en plusieurs petites. Je pensais utiliser le découpage en paragraphes. Ainsi, si j'ai un article qui se présente comme ceci dans ma base de données : <p>Premier paragraphe</p><p>Deuxième paragraphe</p> Il faudrait que la page affichée reseemble à cela : Premier paragraphesuite (lien vers le deuxième paragraphe) Quelqu'un aurait une idée ? Merci, Ernestine
Ernestine Posté 30 Septembre 2003 Auteur Posté 30 Septembre 2003 Ma question sur les accents n'était peut-être pas claire. J'ai un texte entièrement encodé avec les entités HTML, par exemple Je suis allée à la plage où Tom s'est baign&eaucte; Pour la traduire en document WML (ou XML c'est pareil), il faut absolument que je supprime les entités HTML pour en faire des lettres "normales", cad : Je suis allée à la plage où Tom s'est baigné Bien sûr je pourrais faire ça : $chaine = str_replace("é", "é", $chaine);$chaine = str_replace("è", "è", $chaine);$chaine = str_replace("ê", "ê", $chaine);$chaine = str_replace("ë", "ë", $chaine);$chaine = str_replace("à", "à", $chaine);$chaine = str_replace("â", "â", $chaine);$chaine = str_replace("ï", "ï", $chaine);$chaine = str_replace("î", "î", $chaine);$chaine = str_replace("⊚", "ô", $chaine);$chaine = str_replace("ù", "ù", $chaine);$chaine = str_replace("û", "û", $chaine);$chaine = str_replace("ç", "ç", $chaine); Mais c'est un peu n'importe quoi...
Tizel Posté 30 Septembre 2003 Posté 30 Septembre 2003 Tes pages sont en dynamique maintenant ? Sinon, il sufiit de remplacer à l'aide d'un simple éditeur de texte, tous les signes cabalistiques "&cutes" par les symboles correspondant à l'aide d'un simple éditeur de texte. La méthode que tu donne pour parser ton texte en PHP est à mon avis la meilleure. Quand à la longueur de tes textes en WAP, il n'y a effectivement pas de solution miracle. Je serais toi, avant de me lancer danss une version WAP, assez eloignée du HTML "classique", je regarderais du coté de l'Imode. Il y a des documentations assez courtes et trés bien faites sur le site de Bouygues qui t'expliquent comment rendre ton site compatible à peu de frais. Voilà, en espérant que ce post t'aura donné quelques idées... Tizel
Ernestine Posté 30 Septembre 2003 Auteur Posté 30 Septembre 2003 il sufiit de remplacer à l'aide d'un simple éditeur de texte, tous les signes cabalistiques "&cutes" par les symboles correspondant à l'aide d'un simple éditeur de texte. Bonne idée ! Je n'ai que 209 textes à traiter, en commençant maintenant j'aurai peut-être fini à Noël Eh oui mon cher Nico, mon site est désormais aussi dynamique que moi : il est en SPIP. Si ça ne se voit pas, c'est parce que les pages portent l'extension HTML grâce aux fabuleux conseils répandus ici et là par Maître Dan sur l'URL rewriting. Puisque c'est du SPIP, je souhaite garder cet avantage énorme pour que la version wap de mon site soit elle aussi dynamique. Une fois qu'elle sera en place, je n'aurai plus à y mettre le nez ni même les doigts. S'il vous plaît... Vous les pros du PHP... donnez-moi la fonction qui supprimera les entités HTML, c'est la dernière chose qu'il me manque :prière: Car pour la longueur des pages, si si la solution miracle existe, et il m'a fallu 20 secondes chrono en main pour la mettre en place : un copier-coller de cette excellente contribution SPIP. Alors donnez-la moi, cette fonction, il me manque plus qu'elle pour que mon site wap soit fonctionnel
Olivier Posté 30 Septembre 2003 Posté 30 Septembre 2003 bonjour Ernestine Pour la fonction inverseà htmlentities() , il existe la fonction inverse html_entity_decode(), si tu veux un peu plus d'aide sur la fonction http://www.php.net/manual/fr/function.html-entity-decode.php
Dan Posté 30 Septembre 2003 Posté 30 Septembre 2003 Ernestine, La fonction preg_replace est ce qu'il te faut: <?php$search = array ("'<script[^>]*?>.*?</script>'si", // javascript "é", "è", "ê",../.. );$replace = array ("", "é", "è", "ê",../.. );$text = preg_replace ($search, $replace, $document);?> Tout ce qu'il te faut, c'est un tableau $search, un tableau $replace, et un appel de fonction. Dans l'exemple, cela supprime aussi tout le javascript. Je te laisse le soin de compléter . Il faut une ligne dans chaque array.... et ces deux lignes doivent correspondre. Dan
Ernestine Posté 30 Septembre 2003 Auteur Posté 30 Septembre 2003 Merci à vous tous Mais Dan... la solution de Kmakleod fonctionne parfaitement... A moins que la tienne ait un petit + subtil ? Bon, j'ai tout ce qu'il me faut, et vous pouvez regarder : http://www.journal-Ernestine.com/essai.php3?id_article=151 Le premier paragraphe s'affiche, et un menu dessous permet de naviguer sur les 10 paragraphes que contient normalement le texte. Si vous essayez de cliquer sur un numéro ça ne marchera pas à cause de l'url rewriting, mais pour la version wap ça ne posera pas de problème (vu que les pages seront en wml). De plus, les lettres accentuées sont codées en "pur et dur". Je pense qu'il n'y a plus aucun problème... Je vais mettre tout ceci en place. Encore merci
Dan Posté 30 Septembre 2003 Posté 30 Septembre 2003 Ernestine, Olivier a été plus subtil que moi sur ce coup là Dan
Ernestine Posté 1 Octobre 2003 Auteur Posté 1 Octobre 2003 Je crois que je me suis réjouie un peu trop vite. J'ai bien peur que rien ne soit possible En effet, sur chaque page je devrai faire un lien vers le paragraphe suivant. Lien qui comportera deux paramètres (le numéro de l'article et le numéro du paragrpahe). Ce lien contiendra donc un '&'. Hélas, dans une page XML, le '&' est tout simplement interdit : s'il y en a un dans la page, celle-ci est rejetée On doit obligatoire le remplacer par un '&' ou un '& #38;' Mais du coup l'URL se retrouve transformée. Conclusion : je ne peux pas faire grand chose. C'est bien dommage, le plus gros était fait... Si quelqu'un connaît le XML, ce serait gentil de me dire comment écrire une URL à deux paramètres.
David Vincent Posté 1 Octobre 2003 Posté 1 Octobre 2003 Bonjour Ernestine. J'ai eu besoin de faire la même chose pour mon site et effectivement, j'ai voulu utiliser les fonctions htmlentities et html_entity_decode, mais pour une raison que j'ignore, cela n'a l'air d'avoir aucun effet sur le traitement de mes chaines. J'en suis donc venu à faire des str_replace, mais comme tu le dis, c'est un peu nul. Quelqu'un peut-il me donner un exemple qui marche bien de l'utilisation de ces fonctions, je n'ai jamais su faire marcher ces fonctions même avec des chaînes écrites en dur pour mes tests Merci.
Dan Posté 1 Octobre 2003 Posté 1 Octobre 2003 Ernestine, Je ne vois pas trop où est le problème car dans les URLs, c'est bien & qu'il faut mettre et non & ... Tout le monde a pris l'habitude de mettre &, mais une url avec & ne valide pas. Remplacer globalement & par & ne devrait poser aucun souci. Dan
Ernestine Posté 1 Octobre 2003 Auteur Posté 1 Octobre 2003 Oui Dan, c'était une grossière erreur de ma part : j'avais simplement mal écrit l'URL, j'ai honte Mais l'URL rewriting que j'ai mis en place sur mon site me fout tout par terre : il m'urlrewrite mes pages WAP Je ne demande pourtant pas l'impossible que je sache... Je veux juste pouvoir écrire des liens du style : site.com/waparticle.php3?id_article=18¶graphe=3 !!! Mais avec l'urlrewriting ça me donne : site.com/titre_de_l_article.html?paragraphe=3 Et donc quand je clique dessus sur mon portable ça me renvoie sur la page HTML correspondant à l'article, et non sur la page wap. Il faudrait que j'arrive à passer deux arguments au filtre SPIP decouper_pages. J'ai trouvé la méthode sur spip-contrib, mais je me heure à son écriture. La fonction decouper_page serait du genre : decouper_page($texte, $num_article) Et dans le squelette on l'appelerait : [(TEXTE*|decouper_page{33})] Sur cet exemple ça marche. Mais bien sûr dans mon cas, il ne s'agit pas de mettre 33, il s'agit de faire passer le numéro de l'article. Ainsi j'avais pensé écrire : <? $num=33; //par exempleecho "[(TEXTE*|decouper_page{".$num."})]";?> Et là il me renvoie systématiquement une parse error David Vincent> Pourtant la fonction donnée par Kmakleod fonctionne... Mais elle n'est pas parfaite, par exemple elle ne décode pas les "oe" (e collé), c'est bien dommage, ça risque de rendre pas mal de pages innaccessibles. Hou la la... je sens que je vais abandonner...
David Vincent Posté 1 Octobre 2003 Posté 1 Octobre 2003 Eh bien oui, ça marche maintenant, je ne vois pas vraiment où j'avais cafouillé la première fois Merci beaucoup beaucoup à vous deux, Ernestine et Kmacleaod
Dan Posté 1 Octobre 2003 Posté 1 Octobre 2003 Ernestine, Ce que tu vas devoir faire pour générer des URLs différentes c'est de réécrire toutes les fonctions generer_url_(article|breve|rubrique....) en fonction du navigateur (wap ou autre). Il faudra aussi gérer deux versions du cache pour chaque page vue... As-tu interrogé les listes Spip ? Il y a peut-être quelque chose d'existant, non ? Dan
MrFab Posté 2 Octobre 2003 Posté 2 Octobre 2003 waw... tout ça pour du WAP... il y a des internautes qui te l'ont demandé ou c'est un trip personnel ?... Parce que waw, le chantier : /
Ernestine Posté 2 Octobre 2003 Auteur Posté 2 Octobre 2003 C'est un lecteur qui me l'a proposé et m'a fait une page. Mais c'était un cadeau empoisonné puisque maintenant je me suis prise au jeu et je n'y arrive pas. J'ai compris d'où venait ma parse error. C'est parce qu'en fait, quand dans un squelette SPIP on écrit par exemple : <? echo "([#TEXTE*|filtre])"; ?> C'est d'abord le contenu de ([#TEXTE*|filtre]) qui est calculé et mis dans le echo. Alors que moi, j'aurais voulu que le echo affiche ([#TEXTE*|filtre]) qui ensuite aurait été calculé. Donc en gros, si le truc ([#TEXTE*|filtre]) génère un texte avec des guillemets, une fois placé dans le echo les guillements génèrent une erreur. Mais ça encore ce n'est pas grave, c'est facilement résoluble. Moi, mon filtre doit prendre un paramètre. Enfin deux paramètres : $texte (normal), et le numéro de l'article. J'avais donc pensé écrire : <? $numero = "#ID_ARTICLE";echo "([#TEXTE*|filtre{" . $numero . "}])"; ?> Mais non, puisque c'est l'ensemble [#TEXTE*|filtre{$numero}]) qui est traité en premier, il ne connaît pas $numero. Et au lieu de passer le numéro de l'article en paramètre, il lui passe .$numero. ce qui ne mène à rien. Je suis bien embêtée. J'aimerais savoir s'il est possible de passer tout simplement #ID_ARTICLE en paramètre. J'ai fait quelques essais mais rien de concluant. Par exemple : ([#TEXTE*|filtre{[#ID_ARTICLE}]) ne marche pas. HELP PLEASE !
Anonymus Posté 2 Octobre 2003 Posté 2 Octobre 2003 Bon... Je m'en occupe - Premierement, la fonction qui traduit du texte avec accents en texte sans accents : function enleve_accent($chaine){ $chaine = strtr($chaine, "ÀÁÂÃÄÅàáâãäåÒÓÔÕÖØòóôõöøÈÉÊËèéêëÇçÌÍÎÏìíîïÙÚÛÜùúûüÿÑñ", "aaaaaaaaaaaaooooooooooooeeeeeeeecciiiiiiiiuuuuuuuuynn"); return $chaine; } // Ensuite, le test :$mot = "Général Aglaïa";echo enleve_accent($mot); Ensuite le probleme wap : le HTTP_USER_AGENT donne le type de navigateur et sa version. Il serait etonnant qu'il ne dise pas que c'est un appareil wap. Pour le savoir, va sur le site labonneadresse.com. Je saurais ce que renvoie ton wap comme header. A priori, un navigateur wap n'est pas un navigateur mozilla. Donc, il faut dire : <?php $navigateur = $_SERVER["HTTP_USER_AGENT"]; if (substr($navigateur ,0 ,7) == "Mozilla") { echo "<html>"; echo "<head>"; echo "<meta http-equiv=\"Content-Type\" content=\"text/html; charset=iso-8859-1\">"; } else { // on inclus une page wap_index, qui effectue les modifs ::include("wap_index.php"); } ?> Et la page wap_index.php : <?php header("Content-Type: text/vnd.wap.wml"); echo "<?xml version=\"1.0\"?>"; echo "<!DOCTYPE wml PUBLIC \"-//WAPFORUM//DTD WML 1.1//EN\" \"http://www.wapforum.org/DTD/wml_1.1.xml\">"; echo "<wml>"; // bla blaecho "</wml>"; ?> Anonymus.
Anonymus Posté 2 Octobre 2003 Posté 2 Octobre 2003 Bon ... En fait, il ne suffit pas de mettre deux trois balises pour en faire une page wap, il y a une grosse doc, elle est dispo ici : http://www.pyweb.com/ et apparemment, c'est gratuit.. Quand aux ressources, il y en a ici : http://www.inetis.com/default.asp Voilà, bonne lecture, A+, Anonymus.
Ernestine Posté 3 Octobre 2003 Auteur Posté 3 Octobre 2003 Hello Anonymus, Ta proposition pourrait être intéressante si je ne devais pas m'occuper du découpage des articles pour la version WAP. Merci tout de même En attendant CA Y EST ! Tout a l'air de fonctionner correctement. Saisissez votre mobile et rendez-vous sur http://www.journal-Ernestine.com/wap (ne fonctionne pas sur un navigateur web)
Tizel Posté 3 Octobre 2003 Posté 3 Octobre 2003 Bravo Ernestine, Le plus facile reste à faire : te référencer dans des moteurs de recherche WAP. Va donc voir la page http://portail.online.free.fr/wap.htm pour trouver des adresses. Pour ceux qui ne disposent pas de portable wap, il existe aussi des émilateurs, malheureusement, bien peu fonctionnent parfaitement et on ne peut pas beaucoup s'y fier. Tizel
Ernestine Posté 3 Octobre 2003 Auteur Posté 3 Octobre 2003 Salut Tizel (je t'appelle Tizel car il y a plusieurs Nicolas ici ) Merci beaucoup pour ce lien Tu as tout à fait raison : les émulateurs WAP sont à utiliser avec beaucoup de méfiance : ils sont beaucoup plus tolérants (au niveau de la syntaxe de la page) qu'un véritable téléphone. Pour un mobile : le moindre non-respect de la norme WML aura pour conséquence le rejet de la page. Alors que l'émulateur, lui, il fera des efforts pour l'afficher quand même...
Tizel Posté 3 Octobre 2003 Posté 3 Octobre 2003 Je pense que c'est pire, la plupart des émulateurs ne savent même pas respecter le wml et affichent n'importe quoi (et la navigation est impossible, du mois pour les navigateurs en ligne) Tizel
Sujets conseillés
Veuillez vous connecter pour commenter
Vous pourrez laisser un commentaire après vous êtes connecté.
Connectez-vous maintenant