-->

Maboite.org

Jul 02

La W3C n’accepte pas que les pages utilisent l’attribut target=”_blank” sur un lien.

Pourquoi ? Parce qu’il pense que le choix d’ouvrir ou non une nouvelle fenêtre appartient à l’internaute et non au créateur de la page.

C’est bien le respect de l’internaute, mais parfois pour des raisons marketing ou autres, on veut absolument qu’un nouvelle page s’ouvre mais tout en respectant les normes W3C.

Voici donc une méthode simple et efficace grâce à JQuery:

$(document).ready(function() {
    $("a[href^='http://']").click(function(){
      if(($(this).attr("class"))=='internal'){
        return true;
      }
      window.open(this.href);
      return false;
    });
});

Un lien simple :

<a href="http://www.exemple.com">lien</a>

s’ouvrira automatiquement dans une nouvelle fenêtre.

On se garde toutefois la possibilité d’ouvir un lien externe dans la même fenêtre en ajout la class=”internal” comme ceci :

<a href="http://www.exemple.com" class="internal">lien</a>
\\ tags:

Jan 05

Petit mémo: fonctions pour couper des textes et des phrases sans couper les mots avec preg_replace
Deux utilisation différentes:

La première fonction resumeString coupe un texte au plus près de la longueur maximale demandée.
La deuxième fonction resumeSentence coupe un texte au plus près mais en respectant une césure, soit un caractère ‘,’ ou ‘;’ ou ‘.’ ou ‘-’ afin de conserver le sens de la phrase.

Voici les fonctions et des exemples d’utilisation:

$string =" Lorem ipsum dolor sit amet, consectetur adipiscing elit.
Aenean nunc tortor, luctus sodales, sodales eget, pharetra a, urna.
Integer in pede ac ante commodo egestas.
Curabitur ut tortor in nisl varius laoreet.
Vivamus massa. Suspendisse blandit condimentum magna.
Donec rutrum lorem non turpis. Mauris eu tellus ac quam convallis pellentesque.";
function resumeString($string, $length = 150){
  if( mb_strlen($string) <=  $length ) return $string;
  return preg_replace('@(^.{'.$length.',})[\s,:;\.-].*$@isU',"$1...",$string);
}
$newString = resumeString($string, 100);
echo strlen($newString)." => ".$newString;

105 => Lorem ipsum dolor sit amet, consectetur adipiscing elit.
Aenean nunc tortor, luctus sodales, sodales…
Ici, string a été coupé au plus près, à 105 caractères sans prendre en compte la ponctuation mais sans couper les mots. Trois ‘.’ ont été ajoutés pour montrer que la phrase n’est pas complète.

function resumeSentence($string, $length = 150){
  if( mb_strlen($string) <=  $length ) return $string;
  return preg_replace('@(^.{'.$length.',})[,;\.-].*$@isU',"$1.",$string);
}
$newSentence = resumeSentence($string, 100);
echo strlen($newSentence)." => ".$newSentence;

108 => Lorem ipsum dolor sit amet, consectetur adipiscing elit.
Aenean nunc tortor, luctus sodales, sodales eget.
Ici, string a été coupé au plus près, à 108 caractères en prenant en compte la ponctuation.

\\ tags: , , , ,

Dec 12

Après avoir cherché et utilisé des fonctions html2text, je me suis aperçu qu’aucune ne me satisfaisait vraiment parce que mes besoins n’étaient pas seulement de transcrire en texte.

Pour un projet de moteur de recherche, j’ai besoin de crawler des pages HTML et de sauvegarder seulement les parties intéressantes des pages.

Alors après pas mal de temps à m’amuser avec les regexp, voici quelques lignes de code qui nettoient un code html et essai d’en sortir des phrases:

  $c = file_get_contents("http://www.maboite.org");
  $c = html_entity_decode($c, ENT_QUOTES , "utf-8");
  # delete useless tags
  $c = preg_replace('@<\s?(script|embed|object|style)([^>]+)?>.*<\s?/\s?\1\s?>@isU','',$c);
  # delete comments
  $c = preg_replace('@<!--.*-->+@isU','',$c);
  #replace spacing tags
  $c = preg_replace('@<\s?(br|hr)[^>]*>+@i',"\n",$c);
  # replace tabs
  $c = preg_replace("@\t@i","\n",$c);
  # replacing li and Co by text comma separated
  $c = preg_replace('@\s*<\s?(td|li|dt|ot|dd)([^>]+)?>(.*)<\s?/\s?\1\s?>\s*@isU','\3, ',$c);
  # closing end of list, delete comma and add point
  $c = preg_replace('@\s*,\s*<\s?/\s?(ul|dl|ol)\s?>\s*@isU','.',$c);
  # lot of site are using "a" for listing
  $c = preg_replace("@(<\s?/\s?a\s?>)([^<]+)?(<\s?a)@isU",'\1, \3',$c);
  # replace link by text
  $c = preg_replace('@<\s?a[^>]*>([^<]*)<\s?/\s?a\s?>@isU','\1',$c);
  # replacing img alt for keeping text
  $c = preg_replace('@<\s?img([^>]+)?alt\s?=\s?(["|\'])([^\2]+)?\2[^>]*>@isU',"\n".'\3'."\n",$c);
  #get meta desc
  $c = preg_replace('@<\s?meta\s?name\s?=\s?(["|\'])\s?description\s?\1\s?(lang=\s?(["|\'])[^\3]+\3)?\scontent\s?=\s?(["|\'])([^\4]+)\4([^>]+)?>@isU',"\n".'\5'."\n",$c);
  # get page title
  $c = preg_replace('@<\s?title\s?>\s?([^<]+)\s?<\s?/\s?title\s?>@isU',"\n".'\1'."\n",$c);
  # get text container tags
  $c = preg_replace('@<\s?(p|textarea|div)[^>]*>(.*)<\s?/\1\s?>@isU',"\n".'\2'."\n",$c);
  # because sometimes table are used only for displaying table content, add comma
  $c = preg_replace('@\s*<\s?(td)([^>]+)?>(.*)<\s?/\s?\1\s?>\s*@isU','\3, ',$c);
  # Each tr is a new ligne
  $c = preg_replace('@\s*<\s?(tr)([^>]+)?>(.*)<\s?/\s?\1\s?>\s*@isU','\3'."\n",$c);
  # delete all others tags
  $c = preg_replace('@<[^>]+>@i',"\n",$c);
  # explode all sentence which ended with point and start with an uppercase letter
  $c = preg_replace("@(\.(\s*)?([A-Z]))@",".\n".'\3',$c);
  # multi space delete
  $c = preg_replace("@(\n|\s)+@i",'\1',$c);
  # begin as space delete
  $c = preg_replace('@^(\s)+@i','',$c);
  # sentences ended by :\n must be ended by:
  $c = preg_replace("@:\s?\n+@i",': ',$c);
  # remove the last comma added when replacing links
  $c = preg_replace("@\n,\s+@isU","\n",$c);
  $c = preg_replace_callback(
          "@.*\n@isU"
         ,create_function(
            '$matches'
           ,'return (!empty($matches[0]) && strlen($matches[0]) > 50) ? $matches[0]  : "";'
          )
         ,$c
  );
\\ tags: ,

Nov 27

L’hébergement mutualisé… c’est assez frustrant quand on fait de l’hébergement de devoir intervenir sur une machine mutualisée avec pour seul levier de modification un .htaccess et un accès ftp ; mais bon, il faut bien faire avec parfois.

Alors voici un fichier .htaccess à glisser à la racine (document_root) de votre hébergement mutualisé qui permet de dissocier des noms de domaines qui pointent sur le même serveur et le même document_root.

# on active le moteur de règles de réécriture apache.
RewriteEngine on
# si le HTTP_HOST est www.site-un.com
RewriteCond %{HTTP_HOST} www\.site-un\.com

# et si le REQUEST_URI (le chemin) ne commence pas par /www-site-un-com
# obligatoire sinon la règle bouclerait sur elle même
RewriteCond %{REQUEST_URI} !^/www-site-un-com
# alors tous les requetes sont réécrites dans /www-site-un-com
RewriteRule ^(.*)$ /www-site-un-com/$1

RewriteCond %{HTTP_HOST} www\.site-deux\.com
RewriteCond %{REQUEST_URI} !^/www-site-deux-com
RewriteRule ^(.*)$ /www-site-deux-com/$1

RewriteCond %{HTTP_HOST} www\.site-trois\.com
RewriteCond %{REQUEST_URI} !^/www-site-trois-com
RewriteRule ^(.*)$ /www-site-trois-com/$1

Et voila,  3  domaines avec 3 document_root bien distincts. Mais bon la prochaine fois, opter pour un vrai hébergement mutualisé ou dédié mais pas forcement grand public.

\\ tags: , ,

Nov 27

Petite mésaventure qui arrive forcement quand on fait de l’hébergement de site (hosting) un disque d’un de mes serveurs est mort.  Pas de problèmes me direz vous, le serveur était en raid soft.

Mon prestataire change donc le disque mort mais … il me faut maintenant remplir ce nouveau disque avec les données du serveur pour que le mode mirorring du raid fonctionne.

cat /proc/mdstat
sfdisk -d /dev/sda | sfdisk /dev/sdb
mdadm --manage --add /dev/md0 /dev/sdb1
mdadm --manage --add /dev/md1/dev/sdb2

mdx sont les raids

sdbx sont les partitions

Pendant la copie (qui dure pas mal de temps en fonction de l’espace utilisé sur vos disques durs) vous pouvez regardez l’avancement de la copie avec la commande:
cat /proc/mdstat

\\ tags: ,

Oct 21

Oyoboo, un site qui apparemment vient d’être lancé en bêta découvre le spam.
Je viens de recevoir deux mails à contact@domain sur deux de mes domaines, des emails non sollicités bien entendu.

Je pensais que les dirigeants avaient compris l’impact néfaste de ce genre de communication par spam, mais apparemment non, Oyoboo l’utilise.
J’ai envoyé une réponse en demandant d’être supprimé des bases comme le prévoie la loi informatique et liberté…. on va voir ce que ça donne.

\\ tags:

Oct 10

En référencement naturel et positionnement, il coûte très cher de faire apparaître un site en première page des résultats pour un mot clé seulement.

Ça tombe plutôt bien parce que de plus en plus d’internautes saisissent un mot clé pour chercher le nom du site et de plus en plus d’internautes précisent leurs recherches naturelles.

On les comprend.  D’une part parce que de plus en plus de site internet utilise des noms de domaine à rallonges ou des noms de domaine phonétique. D’autre part parce que de toute façon le nombre de résultats est tellement important qu’on n’a quasiment aucune chance de trouver ce que l’on veut.

Depuis quelques temps déjà, j’ai fait le choix lors des prestations de référencement de site internet de  ne pas essayer de positionner un site avec un seul mot clé.  Ceci implique un référencement totalement différent, une étude plus approfondie des mots clés et un effort littéraire important, mais au final c’est payant.

Voici des statistiques que j’ai compilé pour appuyer mes dires, l’évolution montre bien que deux ou trois mots clés saisis représentent plus de la moitié du volume de recherche dans les moteurs de recherches.

referencement naturel nombre de mots cles tapé

Composition en nombre de mot clés des recherches en référencement naturel

Source : onestat.com


J’ai récemment effectué un référencement naturel pour un client, lequel avait quelques visites par jour sur son site internet. Après un référencement naturel visant l’utilisation de 3,4,5 mots clés, ce site internet totalise maintenant 150 visites par jour en moyenne avec un nombre d’expressions clés saisies  assez hallucinant : sur  1106 visiteurs venant du référencement naturel, 1049 expressions différentes.

Alors oui, il faut beaucoup de contenu pour arriver à sortir 1049 expressions clés mais une règle est toujours vraie en référencement naturel :

Faites plaisir à vos internautes et vous ferez plaisir aux moteurs de recherches.

\\ tags: , , ,

Oct 02

Petit mémo pour aller chercher l’entête d’une page (headers) et seulement l’entête.
Expression régulière pour le code HTTP de la page, puis détéction de la nouvelle url si code 301.

$url = "http://maboite.org/";
$ch = curl_init($url);
curl_setopt($ch, CURLOPT_HEADER, true);
curl_setopt($ch, CURLOPT_NOBODY, true);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_USERAGENT, 'MyUserAgent');
curl_setopt($ch, CURLOPT_TIMEOUT, 5);
$headers    = curl_exec($ch);
$CurlErr = curl_error($ch);
curl_close($ch);
if ($CurlErr){
  $status_code  = '404';
}
else{
  # get the status code before downloading the page content
  preg_match("|^HTTP/1\.[0-9]\s([1-5][01][0-9])\s.*$|isU", $headers, $temp);
  $status_code = $temp[1];
}

# if the page has moved, we get the new url
if($status_code == 301){
  preg_match('/\s?[lL]ocation\s?:\s?(.*)\s/',$headers, $temp);
  $url = $temp[1];
}

Pour info, curl est LA meilleur solution pour aller chercher une page sur un serveur distant. file_get_contents et autres fopen ne gèrent pas bien le timeout.

\\ tags: ,

Sep 29

Petit update de la fonction urlize postée précédemment.

function urlize($string){
$find   = array(
'/[^A-Za-z0-9ÀÁÂÃÄÅàáâãäåÒÓÔÕÖØòóôõöøÈÉÊËèéêëÇçÌÍÎÏìíîïÙÚÛÜùúûüÿÑñ]/'  #alphanum + accents
,'/[-]+/'             # multi -
,'/(^-)/'             # - as begin
,'/(-$)/'             # - as end
);
$repl   = array('-','-','','');
return  preg_replace($find, $repl, $string);
}
\\ tags: ,

Sep 29

Juste un petit post pour dire qu’une mise à jour du Pagerank a été effectuée ce week end.

Comme toujours, les mises à jour ne sont pas forcement effectives sur tous les serveurs Google et demandent quelques temps de propagation.

Pour rappel, le pagerank (si si, il existe toujours) est un indice de notoriété, une note sur 10. Plus votre pagerank est élevé et plus votre site parait important aux yeux de Google, et donc plus les résultats lui paraissent pertinents.

\\ tags: ,

Création entreprise d'électricité (en étant électricien ou pas)

Créer son entreprise n'est pas facile, je sais de quoi je parle. Alors crée son entreprise en électricité en étant électricien doit être, je suppose, le même combat. Des tonnes de formulaires à remplir, des semaines d'attente de papier en tout genre. Si vous voulez créer une entreprise en électricité, voici déjà comment devenir électricien.

Softpme, vende de logiciels (agenda xp, oscar xp, garage xp..

Voici un site de vente de logiciel pour TPE ou PME. Vous pouvez trouver un logiciel d'agenda partagé: Garage xp, un logiciel de gestion de garage: Garage XP, et bien d'autres encore.

Antigraffiti et hydrogommage

La société HTP Antigraffiti est basée à Paris dans la 18ème arrondissement. Cette société de nettoyage de graffiti(s) et de rénovation propose de l'hydrogommage et bien d'autres techniques pour mettre fin aux graffiti. Cette société intervient dans tout la France, voici son site internet si vous chercher une entreprise de nettoyage de graffiti

Karim Saadé et Sandro Saadé

Karim Saadé et Sandro Saadé sont les créateurs de Bargylus, le grand vin de Syrie.

Pour la découpe de l'inox ou la vende d'inox : Vendecoupe.fr

L'inox est apparement très utilisé dans un nombre très important d'industries et d'entreprise. Vendécoupe propose de la vente d'inox et de la découpe d'inox. La découpe d'inox se fait grâce à une torche plasma qui, pour avoir visiter l'usine, est assez impréssionnante. La tole inox à découpé est immergée dans l'eau afin de la refroidir rapidement, ceci pour ne pas voiler la tole inox.

Le vin de Syrie : Bargylus.

Pour découvrir le vin de Syrie nommé Bargylus : c'est ici le vin de Syrie Bargylus

Vous cherchez un plombier pour une fuite ou des travaux de plomberie ?

Voici un nouveau site, un plombier.com rempli d'informations sur les plombier qui vous permet d'en savoir un peu plus sur les devis de plombier ou sur les différents types de factures.

Vous y trouverez aussi plein d'informtion sur les formations pour devenir plombier.

Vous cherchez un éléctricien ?

Encore un nouveau site, un electricien.com rempli d'informations sur les électricien, des infos pour devenir électricien.