Aller au contenu

Codage des accents et découpage


Sujets conseillés

Posté

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 "&eacute", ni de "&agrave" : 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 paragraphe
suite (lien vers le deuxième paragraphe)

Quelqu'un aurait une idée ?

Merci,

Ernestine

Posté

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("&ocir;", "ô", $chaine);
$chaine = str_replace("ù", "ù", $chaine);
$chaine = str_replace("û", "û", $chaine);
$chaine = str_replace("ç", "ç", $chaine);

Mais c'est un peu n'importe quoi... :(

Posté

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 :unsure:

Posté
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 :P

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 :idea:

Posté

Ernestine,

La fonction preg_replace est ce qu'il te faut:

<?php
$search = array ("'<script[^>]*?>.*?</script>'si",  // javascript
              "é",
              "&egrave",
              "&ecirc",
../..
              );

$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

Posté

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 :)

Posté

Ernestine,

Olivier a été plus subtil que moi sur ce coup là :up:

Dan

Posté

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.

Posté

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 :wacko:

Merci.

Posté

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

Posté

Oui Dan, c'était une grossière erreur de ma part : j'avais simplement mal écrit l'URL, j'ai honte :blush:

Mais l'URL rewriting que j'ai mis en place sur mon site me fout tout par terre : il m'urlrewrite mes pages WAP :angry:

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&paragraphe=3 !!!

Mais avec l'urlrewriting ça me donne : site.com/titre_de_l_article.html?paragraphe=3 :angry: 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 exemple
echo "[(TEXTE*|decouper_page{".$num."})]";
?>

Et là il me renvoie systématiquement une parse error :angry:

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...

Posté

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

Posté

waw... tout ça pour du WAP... :wacko:

il y a des internautes qui te l'ont demandé ou c'est un trip personnel ?...

Parce que waw, le chantier : /

Posté

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 !

Posté

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&iumla";
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 bla
echo "</wml>";
?>

Anonymus.

Posté

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)

Posté

Bravo Ernestine, :clap:

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

Posté

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...

Posté

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

Veuillez vous connecter pour commenter

Vous pourrez laisser un commentaire après vous êtes connecté.



Connectez-vous maintenant
×
×
  • Créer...