C'est la seule limite actuelle que j'ai rencontrer, mais elle est de taille.
La fonction LIKE marche, au contraire, avec une étonnante efficacité. Nous pouvons donc nous en contenter, pour le projet oBlog, pour la recherche de mot dans les articles. Avec toutefois la perte de fonctionnalité suivante : impossible de tester seulement des mots entiers. Et une exception particulière autour des lettres doubles comme "œ" et d'autres du même genre.
Nos instructions tourneront autour de ces exemples :
ALTER DATABASE `sauver` DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ciCREATE DATABASE `toto` DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci;
Il est important de savoir, et de déclarer, si nous fournissons des requêtes rédiger en UTF-8. Il existe une requête pour signaler à MySQL la norme utilisée pour la rédaction des requêtes suivantes. Il est préférable de la lancer directement, et systématiquement, lors de la connexion à la base.
mysql_query("SET NAMES 'utf8'")
Nous créons une fonction php basé sur le tableau suivant que chacun pour mettre a jour en fonction des situation qu'il a gerer
// exemple de caracteres doubles
$caracteres_doubles [] = array('æ','ae');
$caracteres_doubles [] = array('œ','oe');
$caracteres_doubles [] = array('đ','dj');
function mot_double($mot)
{
global $caracteres_doubles;
$mot_nouveau = $mot;
foreach ($caracteres_doubles as $caractere)
$mot_nouveau = mb_ereg_replace($caractere[1],$caractere[0],$mot_nouveau);
if ($mot_nouveau <> $mot)
return $mot_nouveau;
return false;
}
Puis nous doublons la clause WHERE comme ceci
if (!is_bool($mot_nouveau=mot_double($mot)))
$where = ' WHERE ((texte LIKE "%'.$mot.'%") OR (texte LIKE "%'.$mot_nouveau.'%")) ';
else
$where = ' WHERE texte LIKE "%'.$mot.'%"';
Vouloir faire le tour de l'UTF-8, et donc des normes Unicode pour les écritures des langages humains, c'est comme vouloir faire le tour du monde à pieds. Nous ne ferons qu'une ballade pour observer l'horizon dans différent lieu. En fait nous cherchons les conditions et limites actuelles autour de la norme UTF-8, pour les outils d'environnement que nous utilisons.
La première limite à l'utilisation de l'UTF-8 est de disposer de polices de caractères capables d'afficher a l'écran le résultat de notre recherche. La police la plus complète que nous avons rencontrée est celle fournie en standard par Microsoft par exemple : Arial Unicode MS
Pour apercevoir l'ampleur du problème, résumé sur une page, nous pouvons regarder celle-ci : http://www.unicode.org/fr/charts/
Il existe également un module d'extension pour FireFox, qui propose l'utilisation de plus d'un million de caractères !
"International Sideboard 2.9.1" : https://addons.mozilla.org/fr/firefox/addon/10573/
Trouvons également ici un logiciel gratuit pour l'observation des polices en rapport avec les normes Unicode actuelles : http://www.babelstone.co.uk/Software/
Évidement, nous ne traiterons pas tous les cas dans notre source. Mais nous écrirons une source qui permettent une adaptation à ces différentes potentialités en changeant simplement les contenus des tableaux qui résument les situations que le blog devra gérer, pour palier aux limites des fonctions actuelles spécialisées UTF-8 de PHP et MYSQL.
Nous utiliserons pour cela l'objet XMLHttpRequest mais IL EST LIMITE AU DOMAINE dans lequel il est appellé. Pour dépasser cette limite, nous pouvons utiliser PHP, c'est à dire que XMLHttpRequest interrogera un fichier PHP qui lui interrogera tout le web.
Les fonctions JavaScript (fichier : xmlhttprequest.js)
Le script PHP (fichier : test_url.php)
Le fichier HTML qui utilise le script JavaScript
Avant d'installer ce genre de limitation, il faut considérer le fait que cela empèche l'utilisation du formulaire par les aveugles et les mal-voyants, et donc réfléchir à la nécessité réelle de ce dispositif.
Cela dit, voici un exemple d'image générée par ce script :
Il peut etre appelé dans le html de la facon suivante : <img id='texte_image' src='texte_image.php'>
Il peut être testé dans le php comme ceci : if ($caracteres_saisis <> $_SESSION['texte_image'])...
Enfin, pour que l'utilisateur de votre formulaire puisse, à volonté changer l'image : <a onclick = "document.getElementById('texte_image').src = 'texte_image.php?'+Math.random()">nouveau </a>
Ce script fonctionne avec des polices de caracteres true type (.ttf), mais il est particulierment cohérent avec la police suivante : alfr_ho.ttf. Cette police est libre de droit.
Pour PHP : le site complet (http://fr2.php.net), la version française (http://fr2.php.net/manual/fr/).
Pour SQL : le site complet (http://dev.mysql.com/), pour MySQL5, en français (http://dev.mysql.com/doc/refman/5.0/fr/).
Pour CSS2 : (et bien d'autres choses intéressantes...), le site complet (http://www.yoyodesign.org), pour CSS2 en français (http://www.yoyodesign.org/doc/w3c/css2/cover.html).
Pour JavaScript : (et, là ausssi, d'autres choses...), le site complet (http://www.w3schools.com), pour JavaScript (http://www.w3schools.com/js/default.asp).
Je remercie tous ceux qui participent à la réalisation de ces documents d'excellente qualité.
Le projet de l'oBlog est de construire étape par étape un site de blog, dont les sources sont commentés dans le bLog lui même.
Les dernières versions du source seront disponibles par un lien sur la page d'accueil du site.
Nous mettons à ce projets des contraintes professionnelles :
Nous développons ce projets avec EasyPHP (5.3.1.0), en remerciant chaleureusement tous ceux qui ont contribué au développement de cet outil excellent. Nous utilisons SQL 5, PHP 5, CSS 2