Se connecter

Informatique

Création de sites web

Sujet : Function PHP pour un slug
1
PillsDispenser
Niveau 53
05 janvier 2020 à 13:24:27
// Generate Slug
  public function generateSlug($slug)
  {
    // replace non letter or digits by -
    $slug = preg_replace('~[^\pL\d]+~u', '-', $slug);

    // transliterate
    $slug = iconv('utf-8', 'us-ascii//TRANSLIT', $slug);

    // remove unwanted characters
    $slug = preg_replace('~[^-\w]+~', '', $slug);

    // trim
    $slug = trim($slug, '-');

    // remove duplicate -
    $slug = preg_replace('~-+~', '-', $slug);

    // lowercase
    $slug = strtolower($slug);

    if (empty($slug)) {
      $slug = "n-a";
    }

    $i = 0;
    $slug_save = $slug;
    // Check if slug is used
    while (true) {
      $query = $this->getDb()->prepare('SELECT COUNT(news_slug) FROM news WHERE news_slug=:news_slug');
      $query->bindParam(':news_slug', $slug);
      $query->execute();
      $count = $query->fetch();

      if ((int)$count[0] === 0) {
        break;
      }

      // Increment slug
      $i++;
      $slug = $slug_save."-".$i;
    }

    return $slug;
  }

Bonjour

J'ai un problème des lettres sont supprimés comme le é ou ë du coup j'ai un trou dans mon slug et ca fait vraiment moche.

Xylis2
Niveau 7
05 janvier 2020 à 16:10:17

Utilise slugify

PillsDispenser
Niveau 53
05 janvier 2020 à 16:11:52

Le 05 janvier 2020 à 16:10:17 Xylis2 a écrit :
Utilise slugify

C'est-à-dire

patchwerk
Niveau 17
05 janvier 2020 à 17:26:42

https://github.com/cocur/slugify

PillsDispenser
Niveau 53
05 janvier 2020 à 19:15:16

j'utilise pas de framework

UndeadMarston6
Niveau 10
05 janvier 2020 à 19:31:11

T'as pas besoin de framework pour utiliser ça

20_cent_2017
Niveau 10
05 janvier 2020 à 21:16:04

break et une requête dans une fonction de slug :/

je vais rien dire ce soir XD

PillsDispenser
Niveau 53
09 janvier 2020 à 01:00:41

Le 05 janvier 2020 à 21:16:04 20_cent_2017 a écrit :
break et une requête dans une fonction de slug :/

je vais rien dire ce soir XD

?

20_cent_2017
Niveau 10
09 janvier 2020 à 05:46:11

Ton code c'est de la merde ....

Ta fonction suggère dois faire juste le slug

Ensuite ta des choses à pas faire :

While (true) par exemple.

Voilà. Perso je n'utilise jamais break. Sauf pour un switch.
Donc normalement si tu fais bien les choses ta zéro break.

C'est comme les or die;

[Myster]
Niveau 7
10 janvier 2020 à 14:07:30
function slugify($string, $delimiter = '-')
{
    $oldLocale = setlocale(LC_ALL, '0');
    setlocale(LC_ALL, 'en_US.UTF-8');
    $clean = iconv('UTF-8', 'ASCII//TRANSLIT', $string);
    $clean = preg_replace("/[^a-zA-Z0-9\/_|+ -]/", '', $clean);
    $clean = strtolower($clean);
    $clean = preg_replace("/[\/_|+ -]+/", $delimiter, $clean);
    $clean = trim($clean, $delimiter);
    setlocale(LC_ALL, $oldLocale);
    return $clean;
}

Cadeau.

PillsDispenser
Niveau 53
13 janvier 2020 à 10:13:37

c'est juste l'ajout du setlocal que tu fais ?

-TrAsHeR-
Niveau 3
18 janvier 2020 à 08:51:06

Perso j'utilise https://github.com/cocur/slugify c'est vraiment le meilleur et très modulable.

PillsDispenser
Niveau 53
09 mai 2020 à 15:32:59

Le 18 janvier 2020 à 08:51:06 -TrAsHeR- a écrit :
Perso j'utilise https://github.com/cocur/slugify c'est vraiment le meilleur et très modulable.

Ouais mais faut installer plein de truc juste pour une fonction

Nuagedecube
Niveau 21
09 mai 2020 à 16:11:34

Le 05 janvier 2020 à 13:24:27 PillsDispenser a écrit :

J'ai un problème des lettres sont supprimés comme le é ou ë du coup j'ai un trou dans mon slug et ca fait vraiment moche.

La function remplace les accents, je pense que le problème peut venir de la bdd, un caractère illégal dans le champ qui ne peut être traité ou la page mal encodé.

PillsDispenser
Niveau 53
09 mai 2020 à 17:14:41

Le 10 janvier 2020 à 14:07:30 [Myster] a écrit :
function slugify($string, $delimiter = '-') { $oldLocale = setlocale(LC_ALL, '0'); setlocale(LC_ALL, 'en_US.UTF-8'); $clean = iconv('UTF-8', 'ASCII//TRANSLIT', $string); $clean = preg_replace("/[^a-zA-Z0-9\/_|+ -]/", '', $clean); $clean = strtolower($clean); $clean = preg_replace("/[\/_|+ -]+/", $delimiter, $clean); $clean = trim($clean, $delimiter); setlocale(LC_ALL, $oldLocale); return $clean; }

Cadeau.

Cette fonction fonction comme je veux a priori les lettres sont pas supprimés

1
Sujet : Function PHP pour un slug
   Retour haut de page
Consulter la version web de cette page