Supprimer les accents UTF8 avec PHP

8 avril 2008

Il est souvent utile de supprimer les accents des caractères accentués dans une chaîne. Cette action est utilisée par exemple pour générer une URL propre ou bien un nom de fichier qui ne posera pas de problème.

En PHP, le développeur retrouve souvent la solution  suivante :

$str = strtr($str‘ÁÀÂÄÃÅÇÉÈÊËÍÏÎÌÑÓÒÔÖÕÚÙÛÜÝ’‘AAAAAACEEEEEIIIINOOOOOUUUUY’);
$str = strtr($str‘áàâäãåçéèêëíìîïñóòôöõúùûüýÿ’‘aaaaaaceeeeiiiinooooouuuuyy’);

Ce bout de code fonctionne très bien en IS0-8859-1. Cependant, avec une chaîne en UTF8, des caractères étranges vont s’immiscer. Cela vient du fait que les caractères sont encodés sur 8 bits.

Après maintes essais avec iconv() et autres strtr(), je n’ai pas trouvé de solution à ce problème. Heureusement, Olivier Laviale a trouvé une astuce. Je ne suis pas convaincu que ce soit la méthode la plus performante, mais elle a le mérite de fonctionner :

$str = htmlentities($str, ENT_NOQUOTES, ‘utf-8′);     $str = preg_replace(‘#\&([A-za-z])(?:uml|circ|tilde|acute|grave|cedil|ring)\;#’‘\1′$str);
$str = preg_replace(‘#\&([A-za-z]{2})(?:lig)\;#’‘\1′$str);
$str = preg_replace(‘#\&[^;]+\;#’$str);

Je vous laisser consulter le billet original d’Olivier sur le sujet si vous souhaitez avoir plus d’informations.

Ah ! Les joies de l’encodage… :-)

Les bonnes pratiques avec Struts 2 - construire des URLs avec les bons paramètres

20 mars 2008

Voici un premier billet dans la série sur Les bonnes pratiques avec Struts 2.

Introduction

Struts 2 permet de construire simplement des URLs avec le tag <s:url>. Le problème est que ce tag ajoute dans l’URL tous les paramètres passés dans l’URL de la page courante.

Solutions

Ce genre de comportement est rarement souhaité et ne concerne de quelques cas bien précis. Pour empêcher l’ajout des paramètres courants, il faut positionner l’attribut includeParams avec la valeur none de cette façon :

<s:url value="myurl" includeParams="none">
 <s:param name="myparam" value="myvalue" />
</s:url>

Cette méthode fonctionne bien. Cependant, dans la pratique, il devient vite pénible de devoir positionner cet attribut à chaque fois que l’on souhaite générer une URL. C’est pourquoi, il est préférable de modifier le fichier de configuration de Struts et d’ajouter dans le fichier struts.xml la ligne suivante :

<constant name="struts.url.includeParams" value="none" />

Conclusion

On peut s’étonner du choix de la valeur par défaut de l’attribut includeParams (qui peut prendre les valeurs none, get ou all). Néanmoins, vous voilà armé pour construire des URLs propres et sans aucun paramètre parasite.

Les bonnes pratiques avec Struts 2

19 mars 2008

Il y a quelques temps, j’ai commencé une série d’article sur Les bonnes pratiques avec Struts.

Or, mon dernier article sur un comparatif entre Struts 1 et Struts 2 laissait supposer un passage de Struts 1 à Struts 2. Donc, comme un changement en amène un autre, la série sur Les bonnes pratiques avec Struts devient Les bonnes pratiques avec Struts 2.

Les objectifs de cette série reste les mêmes :

  • réaliser un aide mémoire sur l’utilisation de Struts 2
  • partager et confronter les expériences de chacun sur ce framework MVC

Liste des billets :

En attendant strutsez-vous bien. ;-)

Geronimo certifié Java EE 5

18 mars 2008

Ce n’est pas nouveau, Geronimo est certifié Java EE 5 depuis la version 2.0. Et il y a un peu moins d’un mois, la version 2.1 est sortie.

Cette nouvelle version apporte son lot d’améliorations, corrections et de nouvelles fonctionnalités dont :

  • Custom Server Assemblies : pour simplifier la construction d’un serveur sur-mesure
  • Flexible Administration Console : une console d’administration du serveur
  • GShell : un environnement d’exécution de ligne de commande supportant Groovy
  • WADI Clustering : permet de monter aussi bien des clusters de Jetty ou Tomcat
  • Monitoring support : accessible via la console d’administration, il permet de superviser l’état de l’ensemble des serveurs

Pour plus d’informations, vous pouvez consulter l’annonce officielle de publication de Geronimo 2.1.

Comme toujours, ce serveur d’applications open source est disponible en libre téléchargement sur la page du projet.

JSTL & EL - afficher l’identifiant de session

21 février 2008

Vous utilisez la JSTL et les EL. Vous avez banni les scriplets de vos pages JSP. Mais comment faire référence à l’identifiant de session HTTP dans vos pages JSP ?

C’est tout simple. Mais quand cela fait longtemps que l’on a pratiqué ce genre d’astuce, il est difficile de retrouver la bonne méthode. Alors, pour ne plus oublier, voici la page JSP permettant d’afficher l’identifiant de la session JSP (plus connu sous le doux nom de JSESSIONID) :

<?xml version="1.0" encoding="UTF-8" ?>
<jsp:root
 xmlns:jsp="http://java.sun.com/JSP/Page”
 xmlns=”http://www.w3.org/1999/xhtml”
 version=”2.0″>
<jsp:directive.page
 language=”java”
 contentType=”text/html; charset=UTF-8″
 pageEncoding=”UTF-8″ />
<jsp:output
 omit-xml-declaration=”false”
 doctype-root-element=”html”
 doctype-public=”-//W3C//DTD XHTML 1.0 Strict//EN”
 doctype-system=”http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd”/>
<html>
 <head>
 	<title>Display JSP session id</title>
 </head>
 <body>
 	Your jsessionid is ${pageContext.session.id} !
 </body>
</html>
</jps:root>

Et oui ! C’est aussi simple que ça. ;-)

Supprimer les warnings en Java

30 janvier 2008

Lors de l’étape de compilation, le Java permet de lever les warnings sur des portions de code qui sont corrects d’un point de vue syntaxique, mais qui peuvent poser des problèmes lors de leur exécution.

Le warning le plus courant est sûrement le suivant :

Type safety: Unchecked cast from Object to Collection<String>

Cependant, dans certains cas, le code est correct et ne posera pas de problème à l’exécution. Depuis Java 5.0, il est possible d’indiquer au compilateur, via les annotations, d’ignorer certains warnings sur des blocs de code donnés. Ceci est possible grâce l’annotation @SuppressWarnings.

Par exemple, dans le cas précédent et dans le cas moins évident présenté ci-dessous :

List is a raw type. References to generic type List<E> should be parameterized

Il faut utiliser, l’annotation de la façon suivante :

@SuppressWarnings("unchecked")

L’annotation @SuppressWarnings accepte un nombre important de paramètres. Damien Viel propose une liste des valeurs possibles.

Attention ! Cette annotation doit être utilisée à bon escient. Il est recommandé de se demander pourquoi le Java lève un warning à cet endroit et s’il peut réellement être ignoré…

Struts 1 ou Struts 2 ?

15 novembre 2007

Suite à l’arrivée de JSF, le projet Struts a dû se recadrer afin de ne pas de se disperser et de toujours proposer une offre cohérente et surtout compétitive. C’est alors que le projet a été découpé en trois :

  • Struts 1 : la version classique qui existe depuis de nombreuses années.
  • Struts 2 : la nouvelle version résultant de la fusion entre les projets Struts et Webwork.
  • Shale : la version JSF (si je puis dire).

Autant, il est facile de voir la différence entre la version “classique” de Struts et Shale. Autant, une distinction entre Struts 1 et Struts 2 n’est pas évidente pour tout le monde. C’est pourquoi Christophe Bonche de chez Clever Age dresse un portrait de ces deux versions. Dans sa présentation, il explique notamment le cycle de vie standard de ces deux frameworks. Mais l’objectif du document est d’aider le lecteur à choisir entre Struts 1 et Struts 2. Je vous laisse découvrir le résultat de l’analyse sans surprise. ;-)

Ziki - ziki sera pas ?

10 octobre 2007

Je viens d’apprendre que je me suis fait zikifié ! En effet, une petite recherche sur Google avec mon patronyme retourne en troisième position mon profil ziki. J’ai appris cette nouvelle par le site lui-même. C’est un bon moyen de se faire de la publicité. Et à lire cette note, ça fonctionne ! :-p

Qu’est-ce que Ziki ? D’autres personnes l’ont déjà mieux expliqué que moi. Je pense notamment à Ziki kezako ? d’Eric et l’annonce par Techcrunch de la version française.

Sinon, j’ai eu l’agréable surprise de voir que mon profil ziki est proche de ceux de Nicolas Martignole, Benoït Moussaud, Damien Viel, François Le Droff, … Ce qui n’est pas pour me déplaire. :-D

SvSIP - mieux que l’iPhone ?

13 septembre 2007

Personne n’a échappé au lancement de l’iPhone ! Ce joli téléphone portable avec un écran tactile. Mais saviez-vous qu’il existe aujourd’hui un téléphone portable avec un double écran dont l’un est tactile !?

Et oui ! Ses concepteurs auraient pu l’appeler DSphone, mais ils se sont contenté de l’appeler simplement SvSIP. Mais qu’est-ce donc ? En fait, SvSIP est un client SIP pour la Nintendo DS. Ainsi, muni de vos identifiants SIP, vous pourrez téléphoner avec votre console partout où vous aurez un accès Wi-Fi !

Bon ok, cela n’a rien de révolutionnaire. Mais l’initiative mérite d’être signalée. ;-)

Un homme pressé

12 septembre 2007

Ce n’est pas un billet technique je vous propose aujourd’hui. Mais plutôt un moyen d’améliorer votre vie chaque jour. ;-)

Vous vous rappelez sûrement de cette méthode pour plier un t-shirt en un instant. Dans le même esprit, le site Waitless vous propose de gagner du temps. Par exemple, ils donnent une astuce pour lasser ses chaussures plus rapidement. Je vous laisse découvrir la méthode du turbo parking…

Merci à Olivier M. pour cette découverte !