2010-04-15 4 views
4

j'ai fait une limace avec tableau de bord pour mes histoires URL telles que:problème dans l'affichage d'une limace URL avec le tiret

Fetching records with slug instead of ID

Ceci est mon code pour créer limace:

function Slugit($title) { 
    $title = strip_tags($title); 
    // Preserve escaped octets. 
    $title = preg_replace('|%([a-fA-F0-9][a-fA-F0-9])|', '---$1---', $title); 
    // Remove percent signs that are not part of an octet. 
    $title = str_replace('%', '', $title); 
    // Restore octets. 
    $title = preg_replace('|---([a-fA-F0-9][a-fA-F0-9])---|', '%$1', $title); 


    $title = remove_accents($title); 
    if (seems_utf8($title)) { 
     if (function_exists('mb_strtolower')) { 
      $title = mb_strtolower($title, 'UTF-8'); 
     } 
     $title = utf8_uri_encode($title, 500); 
    } 

    $title = strtolower($title); 
    $title = preg_replace('/&.+?;/', '', $title); // kill entities 
    $title = str_replace('.', '-', $title); 
    $title = preg_replace('/[^%a-z0-9 _-]/', '', $title); 
    $title = preg_replace('/\s+/', '-', $title); 
    $title = preg_replace('|-+|', '-', $title); 
    $title = trim($title, '-'); 


    return $title; 
} 

Comme vous peut voir des tirets, jusqu'à ici, tout va bien. Mais quand je clique sur le lien, il ne peut pas ouvrir et trouver ma base de données car elle est enregistrée en normal et sans tirets.

J'ai donc écrit quelque chose à supprimer des tirets:

$string = str_replace('-', ' ', $string); 

Mais quand il y a ? ou . dans l'URL, il ne peut pas afficher!

Une aide pour récupérer l'URL d'origine ?!

+0

voir ma réponse ici http://stackoverflow.com/questions/2955251/php-function-to-make-slug-url-string/10360316#10360316 –

Répondre

8

Lorsque vous avez une URL comme celle-ci:

https://stackoverflow.com/questions/2647789/problem-in-displaying-a-slug-with-dash 

La partie problem-in-displaying-a-slug-with-dash est pas tout à fait important: il est juste agréable:

  • pour afficher
  • pour les utilisateurs à lire , et voir ce que la question est sur
  • pour le moteur de recherche, comme un mécanisme de SEO.


Ce qui est vraiment important, dans cette URL, est la 2647789 partie: il est l'identifiant de la question dans la base de données - dire qu'elle est cette partie de l'URL qui est utilisé pour charger le question. Cela signifie qu'il n'est pas nécessaire de convertir le slug à ce qui a été tapé en premier par l'utilisateur: la seule chose qui compte est que vous transmettiez l'identifiant de vos données dans chaque URL et que vous l'utilisiez pour retrouver vos données.


Et, si vous voulez une sorte de preuve: essayez d'aller Problem in displaying a URL slug with dash sans la limace: vous verrez que vos charges d'interrogation très bien ;-)

+4

Non seulement ce n'est pas important, mais c'est ignoré! Vous pouvez voir [http://stackoverflow.com/questions/2647789/this-is-NOT-the-title](http://stackoverflow.com/questions/2647789/this-is-NOT-the-title) juste bien! :) – Joshua

+0

problème est ici je n'ai utilisé aucun identifiant: alors vous dites qu'il n'y a aucun moyen de trouver l'URL originale de retour? parce que wordpress le fait, mais je ne peux pas savoir comment!? –

+1

@Mac: si vous ne voulez vraiment pas stocker un identifiant, vous pouvez utiliser l'URL "clean" comme identifiant: stocker l'URL "clean" en tant que champ supplémentaire dans votre DB, et utiliser ce champ pour récupérer vos données arrière. –

0

Si vous ne disposez pas d'identifiant numérique et utilisez simplement le slug pour identifier l'enregistrement dans votre base de données. Ensuite, vous pouvez simplement stocker le slug dans la base de données et l'interroger avec ce slug.