2010-02-10 14 views

Respuesta

8

Ver la primera respuesta aquí URL Friendly Username in PHP?:

function Slug($string) 
{ 
    return strtolower(trim(preg_replace('~[^0-9a-z]+~i', '-', html_entity_decode(preg_replace('~&([a-z]{1,2})(?:acute|cedil|circ|grave|lig|orn|ring|slash|th|tilde|uml);~i', '$1', htmlentities($string, ENT_QUOTES, 'UTF-8')), ENT_QUOTES, 'UTF-8')), '-')); 
} 

$user = 'Alix Axel'; 
echo Slug($user); // alix-axel 

$user = 'Álix Ãxel'; 
echo Slug($user); // alix-axel 

$user = 'Álix----_Ãxel!?!?'; 
echo Slug($user); // alix-axel 
+0

No funciona para caracteres CJK. – user198729

+1

@ user198729: ¿Puedes dar un ejemplo de entrada/salida esperada? –

20

Es posible que desee utilizar una "bala" en su lugar. En lugar de utilizar el título literal como la URL, strtolower() y reemplazar todos los caracteres no alfanuméricos con guiones, luego eliminar los guiones duplicados. Si desea obtener crédito adicional, también puede quitar stopwords.

Así que "1-tan bajo como 10% de pago inicial, membresía gratuita de golf !!!" se convierte en:

as-low-as-10-downpayment-free-gold-membership

Algo como esto:

function sluggify($url) 
{ 
    # Prep string with some basic normalization 
    $url = strtolower($url); 
    $url = strip_tags($url); 
    $url = stripslashes($url); 
    $url = html_entity_decode($url); 

    # Remove quotes (can't, etc.) 
    $url = str_replace('\'', '', $url); 

    # Replace non-alpha numeric with hyphens 
    $match = '/[^a-z0-9]+/'; 
    $replace = '-'; 
    $url = preg_replace($match, $replace, $url); 

    $url = trim($url, '-'); 

    return $url; 
} 

que probablemente se podría acortar con expresiones regulares más largas pero es bastante sencillo como está. La ventaja es que puede usar la misma función para validar el parámetro de consulta antes de ejecutar una consulta en la base de datos para que coincida con el título, para que alguien no pueda meter cosas tontas en su base de datos.

0

que simplemente creo una esencia con una función de utilidad babosa:

https://gist.github.com/ninjagab/11244087

Usted puede utilizarlo para convertir el título de URL SEO amigable.

<?php 
class SanitizeUrl { 

    public static function slug($string, $space="-") { 
     $string = utf8_encode($string); 
     if (function_exists('iconv')) { 
      $string = iconv('UTF-8', 'ASCII//TRANSLIT', $string); 
     } 

     $string = preg_replace("/[^a-zA-Z0-9 \-]/", "", $string); 
     $string = trim(preg_replace("/\\s+/", " ", $string)); 
     $string = strtolower($string); 
     $string = str_replace(" ", $space, $string); 

     return $string; 
    } 
} 

$title = 'Thi is a test string with some "strange" chars ò à ù...'; 
echo SanitizeUrl::slug($title); 
//this will output: 
//thi-is-a-test-string-with-some-strange-chars-o-a-u 
+0

De esa manera, tendrá múltiples "-" cuando tenga múltiples espacios en su cadena. – Guillaume

-1

Para simplificar sólo llena la lista de la variable $change_to y $to_change

<?php 

// Just full the array list to make replacement complete 
// In this space will change to _, à to just a 



$to_change = [ 
    ' ', 'à', 'à', 'â','é', 'è', 'ê', 'ç', 'ù', 'ô', 'ö' // and so on 
]; 

$change_to = [ 
    '_', 'a', 'a', 'a', 'e', 'e', 'e','c', 'u', 'o', 'o' // and so on 
]; 

$texts = 'This is my slug in êlàb élaboré par'; 

$page_id = str_replace($to_change, $change_to, $texts); 
Cuestiones relacionadas