TextUID : Propositions pour un identifiant unique d’un livre, commun à ses différentes éditions, générable automatiquement

Dans cet article, je propose des pistes pour une méthode facilement reproductible permettant de générer automatiquement un identifiant de texte. Ce n’est pas une méthode parfaite, mais plutôt la « moins mauvaise » méthode, aussi je suis ouvert à toute suggestion permettant de l’améliorer.

MAJ 08/06/2014 : ajout des règles 6 et 7 et de deux nouveaux exemples. Merci à @edasfr pour ces remarques.

Pourquoi ?

Lorsque je développe un site ou un outil pour les libraires, un besoin récurent celui est de pouvoir identifier les différents livres correspondant à un même texte (nouvelle édition, réédition en poche, version numérique ou audio, etc.).

Par exemple, le site de la librairie Scylla, sur chaque fiche livre, propose le même livre dans d’autres formats ou d’anciennes éditions épuisés disponibles d’occasion. Autre exemple, la librairie Charybde, pour le calcul de ses meilleures ventes, souhaite que les ventes d’un même texte chez différents éditeurs soient additionnés et pas considérés comme des livres différents.

Aujourd’hui, ce recoupement demande que les librairies (ou autres utilisateurs de Biblys) créent manuellement ces relations, opération fastidieuse qui peut être source d’erreur.

Cahiers des charges

La méthode de génération de l’identifiant doit :

  • être facilement à mettre en œuvre afin que n’importe qui puisse générer un identifiant sans passer par une autorité centrale ;
  • être suffisamment détaillée et prévoir tous les pièges possibles : deux acteurs générant un identifiant pour le même texte doivent parvenir systématiquement au même résultat.

D’autres (mauvaises) solutions

  • Le titre du livre, de toute évidence, ne peut convenir puisque que, si deux editions d’un livre ont a priori le même titre, il n’est pas rare que deux livres sans aucun rapport ait également le même titre. Par exemple, dans la base Biblys (qui est loin d’être exhaustive), il y a pas moins de cinq titres d’auteurs différents intitulé « Les Insoumis« …
  • Les ISBN sont propres à chaque édition d’un livre, il arrive parfois qu’un même livre chez un même éditeur puisse obtenir des ISBN différents au fil des réimpressions, ils ne peuvent donc convenir à cet usage.
  • La norme ISTC (pour International Standard Text Code) se rapproche de nos besoins, mais elle a deux désavantages. D’abord, elle ne nécessite de passer par une autorité centrale, une agence (en France, Électre) qui ne peut créer de nouveaux codes qu’à la demande d’un éditeur ou d’un ayant droit. De plus, elle semble peu utilisée aujourd’hui.

Description de la norme TextUID

Elle se présente sous la forme un ensemble de règles, dont le but est de décrire la méthode de génération de l’identifiant en tentant de prévoir un maximum de cas particuliers pour indiquer la marche à suivre le cas échéant. De nouvelles règles pourront donc être ajoutées si de nouveaux cas particuliers problématique sont découverts.

Règle 1

Le TextUID est une empreinte MD5 généré d’après une chaîne de caractères précises, encodé en UTF-8, en majuscules, contenant :
TITRE ORIGINAL du livre
barre oblique entouré d’espaces : ‘ / ‘
NOM PRÉNOM de l’auteur (ou NOM uniquement le cas échéant)

Soit : TITRE ORIGINAL / NOM PRÉNOM

Règle 2

Le titre du livre doit être dans la langue de publication originale, afin que les différentes traductions d’une oeuvre possèdent bien le même identifiant que l’original.

Règle 3

Si le livre a plusieurs auteurs, on les ajoute dans l’ordre alphabétique, l’un après l’autre, séparés par une virgule et une espace : NOM PRÉNOM, NOM PRÉNOM (ou NOM uniquement le cas échéant)

Soit : TITRE ORIGINAL / NOM PRÉNOM, NOM, NOM PRÉNOM

Règle 4

S’il existe plusieurs graphies pour un titre de livre, on utilise celui mentionné sur la couverture de la première édition.

Règle 5

S’il existe plusieurs graphies pour un nom d’auteur, on utilise celui mentionné sur la couverture de la première édition de son premier livre publié.

Règle 6

Si le livre fait partie d’une série, on utilise le titre du tome uniquement. Si le tome n’a pas de titre, on utilise le nom de la série, suivi d’un tiret et du numéro du tome.

Règle 7

Si le livre est un ouvrage collectif et qu’un ou plusieurs directeurs d’ouvrage sont mentionnés (« Sous la direction de… »), ce sont ces noms qui seront utilisés au lieu du nom des auteurs.

Quelques exemples :

Le Petit Prince

Chaîne : LE PETIT PRINCE / DE SAINT-EXUPÉRY ANTOINE
Empreinte MD5 : 31943e821c39ccd479441a2b0bdcf2b7

L’Attrape-coeurs

Chaîne : THE CATCHER IN THE RYE / SALINGER J. D.
Empreinte MD5 : 9c93c0d32ee994bddf65bb6f3bcfa421

Les Soldats de la mer

Chaîne : LES SOLDATS DE LA MER / RÉMY ADA, RÉMY YVES
Empreinte MD5 : d44c3bf585ee56cf1ae02f043492de81

À la recherche du temps perdu, tome 2

Chaîne : À L’OMBRE DES JEUNES FILLES EN FLEURS / PROUST MARCEL
Empreinte MD5 : 736ac35cc4ce8b67dfbaaa901c03f398

L’énergie à découvert, sous la direction de…

Chaîne : L’ÉNERGIE À DÉCOUVERT / JEANDEL CATHERINE, MOSSERI REMY
Empreinte MD5 : 97ff30f497e277265045e3cbdf08a37c

Exemples de code

PHP

<?php

function textuid($title, $authors)
{
    foreach ($authors as $author)
    {
        if (!isset($authors_string)) $authors_string = NULL;
        else $authors_string .= ', ';
        $authors_string .= trim($author['last_name'].' '.$author['first_name']);
    }
    $string = mb_strtoupper($title.' / '.$authors_string, 'UTF-8');
    $hash = md5($string);
    return array('string' => $string, 'hash' => $hash);
}

$book_title = "Les Soldats de la mer";
$book_authors = array(
    array('first_name' => 'Ada', 'last_name' => 'Rémy'),
    array('first_name' => 'Yves', 'last_name' => 'Rémy')
);

var_dump(textuid($book_title, $book_authors));

Voir aussi ici le code en action.

Conclusion

J’utilise déjà cette méthode, à des fins de test, pour la base Biblys. Je la partage ici car je pense qu’elle pourrait être utile à d’autres en interne, mais aussi parce qu’elle prendrait un tout autre intérêt dans le cadre d’un échange de données entre des bases différentes.

Je suis conscient que cette méthode ne pourra jamais fonctionner à 100%, mais je pense que la première règle doit pouvoir couvrir 99% des cas et que les suivantes doivent pouvoir permettre de se rapprocher au maximum de la perfection… tout en sachant qu’on ne pourra jamais l’atteindre ! Mais c’est sans doute le prix à payer pour une génération automatique, sans vérification humaine.

Je suis donc bien entendu ouvert à toute question, remarque ou proposition de règles qui pourrait permettrait d’améliorer la méthode !

PHP : Conversion ISBN/EAN, la classe !

J’ai proposé ici-même, ces dernières années, plusieurs fonctions PHP permettant la manipulation, la conversion et la validation de codes ISBN, que j’utilise notamment dans le cadre de Biblys ou Citriq.  Entre temps, j’ai découvert la programmation orienté objet : voici donc une classe pour réunir toutes ses fonctions.

Télécharger php-isbn-class sur Github

Un autre intérêt de cette classe par rapport à mes précédentes fonctions est qu’elle ne se limite pas aux ISBN francophones (978-2 et 979-10) mais qu’elle fonctionne avec n’importe quel code, grâce au fichier range.xml qui l’accompagne.

Cette classe peut être utilisée pour :

  • Valider un code ISBN
  • Convertir des codes entre les formats ISBN-10, ISBN-13 et EAN (sans tirets)
  • Calculer le caractère de contrôle
  • Afficher l’agence d’enregistrement du code (pays ou langage)

Démo

Une démo est disponible à l’adresse : http://labs.nokto.net/php-isbn-class/

Installation

  • Incluez ISBN.class.php dans votre script PHP
  • Procurez-vous une version récente du fichier range.xml auprès de l’ISBN International Agency (ou utilisez celle fournie)
  • Définissez la constante ISBN_RANGES_FILE avec le chemin du fichier range.xml
  • Utilisez les autres constantes pour définir vos messages d’erreurs (en anglais par défaut).

Utilisation

 <?php
     require_once('ISBN.class.php');
     $isbn = new ISBN('9791091146098'); // créer un objet ISBN
     if ($isbn->isValid()) // vérifie si le code est un ISBN valide
     {
         echo $isbn->format('ISBN-13'); // affiche le code au format ISBN-13
         echo $isbn->format('ISBN-10'); // affiche le code au format ISBN-10
         echo $isbn->getChecksum(); // calcule et affiche le caractère de contrôle
         echo $isbn->getAgency(); // affiche l'agence d'enregistrement
     }
     else
     {
         echo $isbn->getErrors(); // show validation errors
     }
 ?>

Image de une : Barcode CC BY-SA  Martin Fisch

Citriq : automatiser le référencement de vos critiques littéraires avec PHP

Si votre site ou blog utilise php, il est facile de lui faire écrire le petit code JavaScript permettant de référencer automatiquement vos critiques dans Citriq. Cela vous évitera d’avoir à les entrer une par une.

Voici une fonction qui permet de faire écrire automatiquement le code widget à PHP en fonction des paramètres reçus. Elle nécessite PHP 5.

Cette fonction permet notamment via deux nouveaux paramètres excerpt et rating d’envoyer à Citriq un extrait (jusqu’à 500 caractères) de la critique et une note (sur 100). Ces paramètres étaient jusqu’à présent réservés aux critiques entrées manuellement.  La fonction se charge en outre de l’encodage du texte dans les paramètres du widget de manière à ce que les caractères soient correctement pris en charge par Citriq.

La fonction

function citriq($params) {
  if(empty($params["uid"])) $error = "Le paramètre uid est obligatoire";
  elseif(empty($params["isbn"])) $error = "Le paramètre isbn est obligatoire";
  else return '<script type="text/javascript" src="http://citriq.net/w/crawl?'.http_build_query($params).'"><script>';
  if($params["debug"] == 1 && isset($error)) die("Erreur Citriq : ".$error);
}

Utilisation

Cette fonction prend comme seule valeur un tableau php (array) dont les clés sont les différents paramètres du widget Citriq. Sauf mention contraire, ils sont tous facultatifs. Notez que les noms des paramètres sont toujours en minuscules.

  • uid (obligatoire) : l’identifiant unique de la critique dans votre base ;
  • isbn (obligatoire) : le code IBSN du livre critiqué ;
  • excerpt : un extrait de la critique (jusqu’à 500 caractères) ;
  • reviewer : l’auteur de la critique (s’il y en a plusieurs sur le site) ;
  • source : support dont est issue la critique (si différent du site) ;
  • rating : permet d’indiquer une note (un entier, sur 100) ;
  • date : la date de publication de la critique ;
  • ignore : permet d’afficher le widget sans enregistrer la page en cours ;
  • debug : si ce paramètre facultatif est égal à 1, Citriq affichera des informations statistiques et un éventuel message d’erreur sur votre site.

La fonction retourne le code javascript du widget préparé qu’on peut récupérer dans une variable ou afficher immédiatement avec l’instruction echo.

Exemple

Ci-dessous, un exemple de code (fictif) qui permettrait de référencer la critique publiée sur cette page, pour le résultat sur cette page.

$params["uid"] = 3601;
$params["isbn"] = 9782277492830;
$params["excerpt"] = "Quand, voici quelques mois, les jeunes éditions Dystopia Workshop publièrent Le Prophète et le vizir, la surprise fut de taille. On ne s’attendait pas le moins du monde à voir le couple Rémy revenir à l’écriture et publier de l’inédit. Il avait eu une assez belle carrière dans les années 70, dont plus d’un se serait satisfait, mais il semblait qu’elle fût désormais de...";
$params["reviewer"] = "Jean-Pierre Lion";
$params["source"] = "Bifrost 71";
$params["rating"] = "80"; // Equivaut à 4 étoiles sur 5
echo citriq($params);

Exemple avec WordPress

Il est possible d’utiliser les champs personnalisés de WordPress pour faire générer automatiquement le code du widget Citriq par WordPress. On trouvera plus d’information à ce sujet dans l’article Automatiser le référencement de vos critiques avec WordPress.

MAJ du 08/02/2014 : il existe aussi une extension WordPress pour Citriq, qui utilise cette fonction php mais est beaucoup plus simple à mettre en oeuvre.

$params["uid"] = get_the_id(); // L'identifiant de l'article WordPress
$params["isbn"] = get_post_meta(get_the_id(), "isbn", true); // Le champ personnalisé "isbn"
$params["reviewer] = get_the_author(); // L'auteur de l'article WordPress
$params["excerpt] = get_post_meta(get_the_id(), "extrait", true); // Le champ personnalisé "extrait"
if(is_singular()) echo citriq($params);

Résolution des problèmes

Si le code du widget ne s’affiche pas correctement, vous pouvez utilisez le paramètre facultatif debug pour afficher un message d’erreur. Si vous ne comprenez pas le message d’erreur, n’hésitez pas à poser la question dans les commentaires ci-dessous.

Bonus : l’équivalent en Python (merci Joachim)

php-epub-cleaner

php-epub-cleaner

English readme available on GitHub

Lorsque je convertis un document Word, inDesign ou XPress en HTML en vue de fabriquer un fichier ePub, j’ai souvent de nombreuses corrections à faire. Plutôt que de multiplier les rechercher/remplacer dans Sigil, j’ai préféré créer un script PHP qui s’en occupe pour moi.

Les sources de ce script peuvent être récupérée sur Github :
https://github.com/iwazaru/php-epub-cleaner

Ce script va :

  1. Uploader le fichier ePub vers le serveur
  2. Décompresser le fichier dans un dossier temporaire
  3. Ouvrir chaque fichier .html, .htm ou .xhtml et appliquer les corrections
  4. Recompresser le dossier au format ePub
  5. Proposer le téléchargement du nouvel ePub

 Démo

Une démo se trouve ici : http://labs.nokto.net/php-epub-cleaner

Veuillez noter que tous les fichiers ePub uploadés pour nettoyage seront conservés en cache sur le serveur. Cette page ne devrait être utilisé qu’à des fins de tests. Pour une utilisation en production avec des fichiers commerciaux, merci d’installer votre propre version de l’application à partir des sources sur Github.

Installation

Copier le dossier php-epub-cleaner sur votre serveur supportant PHP5.

Personnalisation

J’ai créé ce script pour nettoyer les erreurs générés par Word2CleanHTML ne respectant pas les règles de la typographie française (ajouter les espaces insécables, retirer les espaces avant les points ou les virgules, etc.), mais vous pouvez tout à fait créer vos propres règles de remplacement en modifiant le tableau php $replacements.

Historique

1.1 (26/02/2014)

  • Ajout d’un journal de correction (« Correction log ») qui compte le nombre de remplacements et de suppressions
  • Diverses corrections de bugs

1.0.1 (27/12/2013)

  • Amélioration de la prise en charge des caractères accentués majuscule (notamment ê)

Citriq : automatiser le référencement des critiques avec WordPress

Si vous avez un blog de critiques littéraires sous WordPress, il est possible d’automatiser simplement le référencement de vos critiques dans Citriq. La manipulation consiste à utiliser les champs personnalisés de WordPress pour associer à chaque critique l’ISBN du livre critiqué, puis de modifier votre thème pour qu’il génére automatiquement le code du widget Citriq en utilisant cet ISBN.

MAJ du 08/02/2014 : Il existe désormais une extension WordPress pour Citriq, bien plus facile à mettre en oeuvre, et qui vous évitera d’avoir à modifier votre thème.

Avant toute chose, il faut bien entendu, si ce n’est pas déjà fait, que votre blog soit inscrit à Citriq.

Marche à suivre

1. Choisissez une critique de votre blog déjà en ligne mais encore non référencée sur Citriq. Cliquez sur Modifier pour accéder à la page d’édition de l’article.

2. Cliquez en haut à droite de la fenêtre d’édition sur Options de l’écran, puis cochez la case Champs personnalisés pour faire apparaître la section correspondante sur la page d’édition, sous la zone de texte.

citriq-wordpress-1.jpg

3. Repérez la zone Ajouter un champ personnalisé et entrez isbn (en minuscules, c’est important) dans le champ Nom et entrez l’ISBN du livre critiqué dans le champ Valeur. Cliquez sur Mettre à jour pour enregistrer votre article.

citriq-wordpress-2.jpg

NB : L’ISBN est un numéro unique attribué à chaque livre publié, long de 13 chiffres et commençant toujours par 978 ou 979. On le trouve dans les premières pages du livre ou au dos, généralement près du code barre. Il peut être entré avec ou sans tiret.

Il va falloir ensuite modifier votre thème pour permettre à WordPress de générer automatiquement le code du widget Citriq. La manipulation peut varier selon le thème utilisé, dans les exemples ci-dessous, j’utilise le thème par défaut Twenty Twelve.

4. Rendez-vous dans le menu Apparence puis dans le sous-menu Éditeur pour modifier le thème actuellement utilisé. Dans la liste des fichiers à droite, ouvrez celui qui gère l’affichage des articles (ici content.php, parfois content-single.php).

citriq-wordpress-3.jpg

5. Repérez l’endroit où vous voulez faire apparaître le widget Citriq, probablement après le contenu du billet (affiché par la fonction the_content()). Copiez-collez-y le code php ci-dessous.

<?php
    $isbn = get_post_meta(get_the_id(), "isbn", true);
    if(is_singular() && $isbn != '') echo '<script type="text/javascript" src="http://citriq.net/w/crawl?uid='.get_the_id().'&isbn='.get_post_meta(get_the_id(),'isbn',true).'"></script>';
    ?>

6. Cliquez sur Mettre à jour le fichier pour enregistrer vos modifications.

7. Vous pouvez à présent afficher le code source de l’article pour vérifier que le code Citriq est bien généré. Pensez à vider votre cache et celui de WordPress si le code ne s’affiche pas.

citriq-wordpress-4.jpg

8. Afin que le référencement automatique fonctionne, il faut que j’active l’option de mon côté dans Citriq pour votre blog. Une fois que vous avez ajouté le widget à votre thème et associé au moins un ISBN à une critique, contactez-moi pour que je vérifie que tout est en ordre et que j’active le référencement automatique.

9. Vous pourrez ensuite ajouter facilement d’autres critiques à Citriq. Il suffira à chaque fois d’indiquer l’ISBN du livre concerné dans le champ personnalisé isbn de chaque critique.

Si le code du widget n’apparaît pas dans le code source

  • Vérifiez que vous avez bien le nom du champ personnalisé isbn en minuscule et non en majuscule.
  • Vérifiez que le fichier que vous avez modifié (content.php dans l’exemple) est bien celui qui gère l’affichage d’un article seul, par exemple en effectuant d’autres modifications pour voir si elles apparaissent.
  • Si vous utilisez une extension pour gérer le cache, pensez à le vider.
  • Effectuez les vérifications décrites sur cette page (en anglais).

Résolution des problèmes

Si le code du widget est correctement généré mais que le référencement ne fonctionne pas, ajoutez ?debug=1 ou &debug=1 à l’adresse de la page de l’article dans la barre de votre navigateur. Le widget Citriq affichera un message d’erreur détaillant le problème s’il y a lieu.

citriq-wordpress-5.jpg

Pour aller plus loin

Nous avons vu ci-dessus un cas simple d’utilisation du widget, mais il est également possible d’utiliser d’autres champs personnalisés pour communiquer à Citriq d’autres informations lors du référencement de la critique. Il faut pour cela modifier le code du widget pour ajouter d’autres paires clés/valeurs et créer les nouveaux champs personnalisés équivalents. Par défaut, le code du widget se présente ainsi :

<script type="text/javascript" src="http://citriq.net/w/crawl?uid=9&isbn=978-2-207-11266-3"></script>

Avec deux variables obligatoires : uid qui est un identifiant unique (ici on utilise l’identifiant de l’article dans la base WordPress affiché grâce à la fonction get_the_id()) et isbn qui correspond à l’ISBN du livre concerné (notre champ personnalisé, affiché grâce à la fonction get_post_meta()).

Il existe trois autres variables facultatives :

  • reviewer : le nom de l’auteur de la critique (utile si plusieurs chroniqueurs interviennent sur le même blog)
  • source : la source originelle de la critique (par exemple, nooSFere référence, en plus de ses propres critiques, des critiques issues de Bifrost, Galaxies, etc.)
  • note : la note donnée au livre, qui doit être sur 100 (3/5 = 60, 18/20 = 90, etc.)
  • excerpt : un extrait de la critique (500 caractères maximum). Pour un résultat optimal, il vaut mieux encoder le texte, par exemple avec la fonction php urlencode().

Pour utiliser une variable, il suffit de d’ajouter les variables sous la forme &clé=valeur au code du widget, par exemple :

<script type="text/javascript" src="http://citriq.net/w/crawl?uid=9&isbn=978-2-207-11266-3&reviewer=Clément&note=75"></script>

Il faudra pour cela ajouter un premier champ personnalisé reviewer et un deuxième note à chaque article, puis utiliser la fonction get_post_meta() pour générer le code du widget en utilisant ces champs. Voici le code php à insérer dans ce cas :

<?php

    $isbn = get_post_meta(get_the_id(), "isbn", true);
    if(is_singular() && $isbn != '') echo '<script type="text/javascript" src="http://citriq.net/w/crawl?uid='.get_the_id().'&isbn='.get_post_meta(get_the_id(),'isbn',true).'&reviewer='.get_post_meta(get_the_id(),'reviewer',true).'&note='.get_post_meta(get_the_id(),'note',true).'&excerpt='.urlencode(get_post_meta(get_the_id(),'excerpt',true)).'"></script>';

?>

Bien sûr, il n’est pas toujours pertinent d’utiliser les champs personnalisés. Pour l’auteur de la critique (reviewer), on utilisera plus probablement l’auteur de l’article dans WordPress, en utilisant la fonction the_author() plutôt que la fonction get_post_meta().

Voici un exemple de code qui ne transmettra à Citriq que l’ISBN (d’après le champ personnalisé isbn) et le nom de l’auteur du billet :

<?php

    $isbn = get_post_meta(get_the_id(), "isbn", true);
    if(is_singular() && $isbn != '') echo '<script type="text/javascript" src="http://citriq.net/w/crawl?uid='.get_the_id().'&isbn='.get_post_meta(get_the_id(),'isbn',true).'&reviewer='.the_author().'"></script>';

?>

Quelques blogs sous WordPress qui utilisent le référencement automatique

Une icône pour les fichiers ePub

icones_epub.png

N’ayant pas trouvé d’icône satisfaisante pour les fichiers ePub, j’ai décidé de créer la mienne, reprenant le logo et les couleurs officielles de l’IDPF. Il sera utilisé sur les plateformes numériques utilisant Biblys (notamment e-Bélial’ et bientôt Dystopia). Si elle vous plaît, vous pouvez télécharger le zip ci-dessous contenant le fichier en plusieurs tailles aux format .png et .ico.

Télécharger epub_icons.zip

N’étant pas du tout graphiste, c’est une première expérience pour moi. Que les plus habiles dans ce domaine n’hésitent pas à l’améliorer grâce au .psd également joint dans le fichier zip (et qu’ils n’oublient pas de faire tourner après !). Il peut aussi servi de base pour créer sur le même modèle des icones d’autres formats de livres numériques (PDF, Kindle, etc.)

PHP : Convertir un code EAN-13 (sans tirets) en ISBN-13 (avec tirets)

Il y a quelques temps, je proposais ici-même une fonction php pour convertir ISBN-10 en EAN-13 (en recalculant la clé de contrôle) mais aussi une tentative de méthode pour convertir un EAN-13 en ISBN. Seul petit souci, aujourd’hui les ISBN sont à 13 chiffres, comme les EAN, la seule différence entre les deux formats étant les tirets qui les sépare, mais je n’avais aucune idée de la marche à suivre pour retrouver la place de ces fameux tirets dans le code. J’ai longtemps cherché comment faire, ayant besoin de convertir des EAN-13 en ISBN-13 dans le cadre de mon moteur Tys, qui propulse notamment la Librairie Ys, la Librairie Soleil Vert et le site des Editions du Bélial. Et bien, grâce au coup de pouce d’un gentil commentateur, c’est maintenant chose faite. Continuer la lecture de « PHP : Convertir un code EAN-13 (sans tirets) en ISBN-13 (avec tirets) »

PHP : Convertir un ISBN-10 en EAN-13 (et vice-versa)

Quand on est développeur web et libraire (et un peu nerd sur les bords), on peut se retrouver à faire ce genre de choses : convertir des codes ISBN en code EAN et réciproquement via PHP. Comme je n’ai rien trouvé d’équivalent ailleurs, j’ai du créer ma propre petite fonction. Et comme j’ai pensé qu’elle pouvait à d’autres, je vous en livre le code ci-dessous. Ainsi que quelques interrogations.

Continuer la lecture de « PHP : Convertir un ISBN-10 en EAN-13 (et vice-versa) »