yoast php string seo friendly-url slug

php - yoast - Generar URLs amigables para SEO(slugs)



slug jquery (10)

Algunas personas se han vinculado a "php-slugs" en google.com, pero parece que su página está un poco arruinada ahora, así que aquí está si alguien la necesita:

// source: https://code.google.com/archive/p/php-slugs/ function my_str_split($string) { $slen=strlen($string); for($i=0; $i<$slen; $i++) { $sArray[$i]=$string{$i}; } return $sArray; } function noDiacritics($string) { //cyrylic transcription $cyrylicFrom = array(''А'', ''Б'', ''В'', ''Г'', ''Д'', ''Е'', ''Ё'', ''Ж'', ''З'', ''И'', ''Й'', ''К'', ''Л'', ''М'', ''Н'', ''О'', ''П'', ''Р'', ''С'', ''Т'', ''У'', ''Ф'', ''Х'', ''Ц'', ''Ч'', ''Ш'', ''Щ'', ''Ъ'', ''Ы'', ''Ь'', ''Э'', ''Ю'', ''Я'', ''а'', ''б'', ''в'', ''г'', ''д'', ''е'', ''ё'', ''ж'', ''з'', ''и'', ''й'', ''к'', ''л'', ''м'', ''н'', ''о'', ''п'', ''р'', ''с'', ''т'', ''у'', ''ф'', ''х'', ''ц'', ''ч'', ''ш'', ''щ'', ''ъ'', ''ы'', ''ь'', ''э'', ''ю'', ''я''); $cyrylicTo = array(''A'', ''B'', ''W'', ''G'', ''D'', ''Ie'', ''Io'', ''Z'', ''Z'', ''I'', ''J'', ''K'', ''L'', ''M'', ''N'', ''O'', ''P'', ''R'', ''S'', ''T'', ''U'', ''F'', ''Ch'', ''C'', ''Tch'', ''Sh'', ''Shtch'', '''', ''Y'', '''', ''E'', ''Iu'', ''Ia'', ''a'', ''b'', ''w'', ''g'', ''d'', ''ie'', ''io'', ''z'', ''z'', ''i'', ''j'', ''k'', ''l'', ''m'', ''n'', ''o'', ''p'', ''r'', ''s'', ''t'', ''u'', ''f'', ''ch'', ''c'', ''tch'', ''sh'', ''shtch'', '''', ''y'', '''', ''e'', ''iu'', ''ia''); $from = array("Á", "À", "Â", "Ä", "Ă", "Ā", "Ã", "Å", "Ą", "Æ", "Ć", "Ċ", "Ĉ", "Č", "Ç", "Ď", "Đ", "Ð", "É", "È", "Ė", "Ê", "Ë", "Ě", "Ē", "Ę", "Ə", "Ġ", "Ĝ", "Ğ", "Ģ", "á", "à", "â", "ä", "ă", "ā", "ã", "å", "ą", "æ", "ć", "ċ", "ĉ", "č", "ç", "ď", "đ", "ð", "é", "è", "ė", "ê", "ë", "ě", "ē", "ę", "ə", "ġ", "ĝ", "ğ", "ģ", "Ĥ", "Ħ", "I", "Í", "Ì", "İ", "Î", "Ï", "Ī", "Į", "IJ", "Ĵ", "Ķ", "Ļ", "Ł", "Ń", "Ň", "Ñ", "Ņ", "Ó", "Ò", "Ô", "Ö", "Õ", "Ő", "Ø", "Ơ", "Œ", "ĥ", "ħ", "ı", "í", "ì", "i", "î", "ï", "ī", "į", "ij", "ĵ", "ķ", "ļ", "ł", "ń", "ň", "ñ", "ņ", "ó", "ò", "ô", "ö", "õ", "ő", "ø", "ơ", "œ", "Ŕ", "Ř", "Ś", "Ŝ", "Š", "Ş", "Ť", "Ţ", "Þ", "Ú", "Ù", "Û", "Ü", "Ŭ", "Ū", "Ů", "Ų", "Ű", "Ư", "Ŵ", "Ý", "Ŷ", "Ÿ", "Ź", "Ż", "Ž", "ŕ", "ř", "ś", "ŝ", "š", "ş", "ß", "ť", "ţ", "þ", "ú", "ù", "û", "ü", "ŭ", "ū", "ů", "ų", "ű", "ư", "ŵ", "ý", "ŷ", "ÿ", "ź", "ż", "ž"); $to = array("A", "A", "A", "AE", "A", "A", "A", "A", "A", "AE", "C", "C", "C", "C", "C", "D", "D", "D", "E", "E", "E", "E", "E", "E", "E", "E", "G", "G", "G", "G", "G", "a", "a", "a", "ae", "ae", "a", "a", "a", "a", "ae", "c", "c", "c", "c", "c", "d", "d", "d", "e", "e", "e", "e", "e", "e", "e", "e", "g", "g", "g", "g", "g", "H", "H", "I", "I", "I", "I", "I", "I", "I", "I", "IJ", "J", "K", "L", "L", "N", "N", "N", "N", "O", "O", "O", "OE", "O", "O", "O", "O", "CE", "h", "h", "i", "i", "i", "i", "i", "i", "i", "i", "ij", "j", "k", "l", "l", "n", "n", "n", "n", "o", "o", "o", "oe", "o", "o", "o", "o", "o", "R", "R", "S", "S", "S", "S", "T", "T", "T", "U", "U", "U", "UE", "U", "U", "U", "U", "U", "U", "W", "Y", "Y", "Y", "Z", "Z", "Z", "r", "r", "s", "s", "s", "s", "ss", "t", "t", "b", "u", "u", "u", "ue", "u", "u", "u", "u", "u", "u", "w", "y", "y", "y", "z", "z", "z"); $from = array_merge($from, $cyrylicFrom); $to = array_merge($to, $cyrylicTo); $newstring=str_replace($from, $to, $string); return $newstring; } function makeSlugs($string, $maxlen=0) { $newStringTab=array(); $string=strtolower(noDiacritics($string)); if(function_exists(''str_split'')) { $stringTab=str_split($string); } else { $stringTab=my_str_split($string); } $numbers=array("0","1","2","3","4","5","6","7","8","9","-"); //$numbers=array("0","1","2","3","4","5","6","7","8","9"); foreach($stringTab as $letter) { if(in_array($letter, range("a", "z")) || in_array($letter, $numbers)) { $newStringTab[]=$letter; } elseif($letter==" ") { $newStringTab[]="-"; } } if(count($newStringTab)) { $newString=implode($newStringTab); if($maxlen>0) { $newString=substr($newString, 0, $maxlen); } $newString = removeDuplicates(''--'', ''-'', $newString); } else { $newString=''''; } return $newString; } function checkSlug($sSlug) { if(preg_match("/^[a-zA-Z0-9]+[a-zA-Z0-9/-]*$/", $sSlug) == 1) { return true; } return false; } function removeDuplicates($sSearch, $sReplace, $sSubject) { $i=0; do{ $sSubject=str_replace($sSearch, $sReplace, $sSubject); $pos=strpos($sSubject, $sSearch); $i++; if($i>100) { die(''removeDuplicates() loop error''); } }while($pos!==false); return $sSubject; }

Definición

De Wikipedia :

Un slug es la parte de una URL que identifica una página que utiliza palabras clave legibles.

Para hacer que la URL sea más fácil para los usuarios, los caracteres especiales a menudo también se eliminan o se reemplazan. Por ejemplo, los caracteres acentuados generalmente son reemplazados por letras del alfabeto inglés; Los signos de puntuación generalmente se eliminan; y los espacios (que deben codificarse como% 20 o +) se reemplazan por guiones (-) o guiones bajos (_), que son más agradables estéticamente.

Contexto

Desarrollé un sitio web para compartir fotos en el que los usuarios pueden subir, compartir y ver fotos.

Todas las páginas se generan automáticamente sin mi control sobre el título. Debido a que el título de una foto o el nombre de un usuario pueden contener caracteres o espacios acentuados, necesitaba una función para crear automáticamente las babosas y mantener las URL legibles.

Creé la siguiente función que reemplaza los caracteres acentuados (èêëçî), elimina la puntuación y los caracteres incorrectos (# @ & ~ ^!) Y transforma los espacios en guiones.

Preguntas

  • ¿Qué opinas sobre esta función?
  • ¿Conoces alguna otra función para crear babosas?

Código

php

function sluggable($str) {     $before = array( ''àáâãäåòóôõöøèéêëðçìíîïùúûüñšž'', ''/[^a-z0-9/s]/'',         array(''//s/'', ''/--+/'', ''/---+/'')     );       $after = array( ''aaaaaaooooooeeeeeciiiiuuuunsz'', '''', ''-'' );     $str = strtolower($str);     $str = strtr($str, $before[0], $after[0]);     $str = preg_replace($before[1], $after[1], $str);     $str = trim($str);     $str = preg_replace($before[2], $after[2], $str);       return $str; }


Encontré esto en la red, hace exactamente lo que quiere, pero mantiene el caso.

function sluggable($p) { $ts = array("/[À-Å]/","/Æ/","/Ç/","/[È-Ë]/","/[Ì-Ï]/","/Ð/","/Ñ/","/[Ò-ÖØ]/","/×/","/[Ù-Ü]/","/[Ý-ß]/","/[à-å]/","/æ/","/ç/","/[è-ë]/","/[ì-ï]/","/ð/","/ñ/","/[ò-öø]/","/÷/","/[ù-ü]/","/[ý-ÿ]/"); $tn = array("A","AE","C","E","I","D","N","O","X","U","Y","a","ae","c","e","i","d","n","o","x","u","y"); return preg_replace($ts,$tn, $p); }

source


Este grupo de funciones convierte los caracteres especiales para incluir solo az , 0-9 y - . También hace un par de cosas adicionales como convertir ampersands ( & ) a la palabra and .

<?php /* Call this function to create a slug from $string */ function create_slug($string){ $string = remove_accents($string); $string = symbols_to_words($string); $string = strtolower($string); // Force lowercase $space_chars = array( " ", // space "…", // ellipsis "–", // en dash "—", // em dash "/", // slash "//", // backslash ":", // colon ";", // semi-colon ".", // period "+", // plus sign "#", // pound sign "~", // tilde "_", // underscore "|", // pipe ); foreach($space_chars as $char){ $string = str_replace($char, ''-'', $string); // Change spaces to dashes } // Only allow letters, numbers, and dashes $string = preg_replace(''/([^a-zA-Z0-9/-]+)/'', '''', $string); $string = preg_replace(''/-+/'', ''-'', $string); // Clean up extra dashes if(substr($string, -1)===''-''){ // Remove - from end $string = substr($string, 0, -1); } if(substr($string, 0, 1)===''-''){ // Remove - from start $string = substr($string, 1); } return $string; } /** * Borrowed from WordPress * Converts all accent characters to ASCII characters. * * If there are no accent characters, then the string given is just returned. * * @since 1.2.1 * * @param string $string Text that might have accent characters * @return string Filtered string with replaced "nice" characters. */ function remove_accents($string) { if(!preg_match(''/[/x80-/xff]/'', $string)){ return $string; } if($this->seems_utf8($string)){ $chars = array( // Decompositions for Latin-1 Supplement chr(195).chr(128) => ''A'', chr(195).chr(129) => ''A'', chr(195).chr(130) => ''A'', chr(195).chr(131) => ''A'', chr(195).chr(132) => ''A'', chr(195).chr(133) => ''A'', chr(195).chr(135) => ''C'', chr(195).chr(136) => ''E'', chr(195).chr(137) => ''E'', chr(195).chr(138) => ''E'', chr(195).chr(139) => ''E'', chr(195).chr(140) => ''I'', chr(195).chr(141) => ''I'', chr(195).chr(142) => ''I'', chr(195).chr(143) => ''I'', chr(195).chr(145) => ''N'', chr(195).chr(146) => ''O'', chr(195).chr(147) => ''O'', chr(195).chr(148) => ''O'', chr(195).chr(149) => ''O'', chr(195).chr(150) => ''O'', chr(195).chr(153) => ''U'', chr(195).chr(154) => ''U'', chr(195).chr(155) => ''U'', chr(195).chr(156) => ''U'', chr(195).chr(157) => ''Y'', chr(195).chr(159) => ''s'', chr(195).chr(160) => ''a'', chr(195).chr(161) => ''a'', chr(195).chr(162) => ''a'', chr(195).chr(163) => ''a'', chr(195).chr(164) => ''a'', chr(195).chr(165) => ''a'', chr(195).chr(167) => ''c'', chr(195).chr(168) => ''e'', chr(195).chr(169) => ''e'', chr(195).chr(170) => ''e'', chr(195).chr(171) => ''e'', chr(195).chr(172) => ''i'', chr(195).chr(173) => ''i'', chr(195).chr(174) => ''i'', chr(195).chr(175) => ''i'', chr(195).chr(177) => ''n'', chr(195).chr(178) => ''o'', chr(195).chr(179) => ''o'', chr(195).chr(180) => ''o'', chr(195).chr(181) => ''o'', chr(195).chr(182) => ''o'', chr(195).chr(182) => ''o'', chr(195).chr(185) => ''u'', chr(195).chr(186) => ''u'', chr(195).chr(187) => ''u'', chr(195).chr(188) => ''u'', chr(195).chr(189) => ''y'', chr(195).chr(191) => ''y'', // Decompositions for Latin Extended-A chr(196).chr(128) => ''A'', chr(196).chr(129) => ''a'', chr(196).chr(130) => ''A'', chr(196).chr(131) => ''a'', chr(196).chr(132) => ''A'', chr(196).chr(133) => ''a'', chr(196).chr(134) => ''C'', chr(196).chr(135) => ''c'', chr(196).chr(136) => ''C'', chr(196).chr(137) => ''c'', chr(196).chr(138) => ''C'', chr(196).chr(139) => ''c'', chr(196).chr(140) => ''C'', chr(196).chr(141) => ''c'', chr(196).chr(142) => ''D'', chr(196).chr(143) => ''d'', chr(196).chr(144) => ''D'', chr(196).chr(145) => ''d'', chr(196).chr(146) => ''E'', chr(196).chr(147) => ''e'', chr(196).chr(148) => ''E'', chr(196).chr(149) => ''e'', chr(196).chr(150) => ''E'', chr(196).chr(151) => ''e'', chr(196).chr(152) => ''E'', chr(196).chr(153) => ''e'', chr(196).chr(154) => ''E'', chr(196).chr(155) => ''e'', chr(196).chr(156) => ''G'', chr(196).chr(157) => ''g'', chr(196).chr(158) => ''G'', chr(196).chr(159) => ''g'', chr(196).chr(160) => ''G'', chr(196).chr(161) => ''g'', chr(196).chr(162) => ''G'', chr(196).chr(163) => ''g'', chr(196).chr(164) => ''H'', chr(196).chr(165) => ''h'', chr(196).chr(166) => ''H'', chr(196).chr(167) => ''h'', chr(196).chr(168) => ''I'', chr(196).chr(169) => ''i'', chr(196).chr(170) => ''I'', chr(196).chr(171) => ''i'', chr(196).chr(172) => ''I'', chr(196).chr(173) => ''i'', chr(196).chr(174) => ''I'', chr(196).chr(175) => ''i'', chr(196).chr(176) => ''I'', chr(196).chr(177) => ''i'', chr(196).chr(178) => ''IJ'',chr(196).chr(179) => ''ij'', chr(196).chr(180) => ''J'', chr(196).chr(181) => ''j'', chr(196).chr(182) => ''K'', chr(196).chr(183) => ''k'', chr(196).chr(184) => ''k'', chr(196).chr(185) => ''L'', chr(196).chr(186) => ''l'', chr(196).chr(187) => ''L'', chr(196).chr(188) => ''l'', chr(196).chr(189) => ''L'', chr(196).chr(190) => ''l'', chr(196).chr(191) => ''L'', chr(197).chr(128) => ''l'', chr(197).chr(129) => ''L'', chr(197).chr(130) => ''l'', chr(197).chr(131) => ''N'', chr(197).chr(132) => ''n'', chr(197).chr(133) => ''N'', chr(197).chr(134) => ''n'', chr(197).chr(135) => ''N'', chr(197).chr(136) => ''n'', chr(197).chr(137) => ''N'', chr(197).chr(138) => ''n'', chr(197).chr(139) => ''N'', chr(197).chr(140) => ''O'', chr(197).chr(141) => ''o'', chr(197).chr(142) => ''O'', chr(197).chr(143) => ''o'', chr(197).chr(144) => ''O'', chr(197).chr(145) => ''o'', chr(197).chr(146) => ''OE'',chr(197).chr(147) => ''oe'', chr(197).chr(148) => ''R'',chr(197).chr(149) => ''r'', chr(197).chr(150) => ''R'',chr(197).chr(151) => ''r'', chr(197).chr(152) => ''R'',chr(197).chr(153) => ''r'', chr(197).chr(154) => ''S'',chr(197).chr(155) => ''s'', chr(197).chr(156) => ''S'',chr(197).chr(157) => ''s'', chr(197).chr(158) => ''S'',chr(197).chr(159) => ''s'', chr(197).chr(160) => ''S'', chr(197).chr(161) => ''s'', chr(197).chr(162) => ''T'', chr(197).chr(163) => ''t'', chr(197).chr(164) => ''T'', chr(197).chr(165) => ''t'', chr(197).chr(166) => ''T'', chr(197).chr(167) => ''t'', chr(197).chr(168) => ''U'', chr(197).chr(169) => ''u'', chr(197).chr(170) => ''U'', chr(197).chr(171) => ''u'', chr(197).chr(172) => ''U'', chr(197).chr(173) => ''u'', chr(197).chr(174) => ''U'', chr(197).chr(175) => ''u'', chr(197).chr(176) => ''U'', chr(197).chr(177) => ''u'', chr(197).chr(178) => ''U'', chr(197).chr(179) => ''u'', chr(197).chr(180) => ''W'', chr(197).chr(181) => ''w'', chr(197).chr(182) => ''Y'', chr(197).chr(183) => ''y'', chr(197).chr(184) => ''Y'', chr(197).chr(185) => ''Z'', chr(197).chr(186) => ''z'', chr(197).chr(187) => ''Z'', chr(197).chr(188) => ''z'', chr(197).chr(189) => ''Z'', chr(197).chr(190) => ''z'', chr(197).chr(191) => ''s'', // Euro Sign chr(226).chr(130).chr(172) => ''E'', // GBP (Pound) Sign chr(194).chr(163) => ''''); $string = strtr($string, $chars); } else { // Assume ISO-8859-1 if not UTF-8 $chars[''in''] = chr(128).chr(131).chr(138).chr(142).chr(154).chr(158) .chr(159).chr(162).chr(165).chr(181).chr(192).chr(193).chr(194) .chr(195).chr(196).chr(197).chr(199).chr(200).chr(201).chr(202) .chr(203).chr(204).chr(205).chr(206).chr(207).chr(209).chr(210) .chr(211).chr(212).chr(213).chr(214).chr(216).chr(217).chr(218) .chr(219).chr(220).chr(221).chr(224).chr(225).chr(226).chr(227) .chr(228).chr(229).chr(231).chr(232).chr(233).chr(234).chr(235) .chr(236).chr(237).chr(238).chr(239).chr(241).chr(242).chr(243) .chr(244).chr(245).chr(246).chr(248).chr(249).chr(250).chr(251) .chr(252).chr(253).chr(255); $chars[''out''] = "EfSZszYcYuAAAAAACEEEEIIIINOOOOOOUUUUYaaaaaaceeeeiiiinoooooouuuuyy"; $string = strtr($string, $chars[''in''], $chars[''out'']); $double_chars[''in''] = array(chr(140), chr(156), chr(198), chr(208), chr(222), chr(223), chr(230), chr(240), chr(254)); $double_chars[''out''] = array(''OE'', ''oe'', ''AE'', ''DH'', ''TH'', ''ss'', ''ae'', ''dh'', ''th''); $string = str_replace($double_chars[''in''], $double_chars[''out''], $string); } return $string; } function symbols_to_words($output){ $output = str_replace(''@'', '' at '', $output); $output = str_replace(''%'', '' percent '', $output); $output = str_replace(''&'', '' and '', $output); return $output; }


Esto realmente funciona bien. Devuelve la barra de url limpia correcta.

$string = ''(1234) S*m@#ith S)&+*t `E}{xam)ple?>land - - 1!_2)#3)(*4""5''; // remove all non alphanumeric characters except spaces $clean = preg_replace(''/[^a-zA-Z0-9/s]/'', '''', strtolower($string)); // replace one or multiple spaces into single dash (-) $clean = preg_replace(''!/s+!'', ''-'', $clean); echo $clean; // 1234-smith-st-exampleland-12345


Me gusta el código php-slugs en la solución de Google Code. Pero si quieres uno más simple que funcione con UTF-8:

function format_uri( $string, $separator = ''-'' ) { $accents_regex = ''~&([a-z]{1,2})(?:acute|cedil|circ|grave|lig|orn|ring|slash|th|tilde|uml);~i''; $special_cases = array( ''&'' => ''and'', "''" => ''''); $string = mb_strtolower( trim( $string ), ''UTF-8'' ); $string = str_replace( array_keys($special_cases), array_values( $special_cases), $string ); $string = preg_replace( $accents_regex, ''$1'', htmlentities( $string, ENT_QUOTES, ''UTF-8'' ) ); $string = preg_replace("/[^a-z0-9]/u", "$separator", $string); $string = preg_replace("/[$separator]+/u", "$separator", $string); return $string; }

Asi que

echo format_uri("#@&~^!âèêëçî");

salidas

-and-aeeeci

Por favor, comenta si encuentras algunos errores.



significa ser SEO amigable permalink . Mantenga su URL pequeña y amigable para SEO usando palabras clave. Puedes ignorar las preposiciones en post permalinks. No repita ninguna palabra clave aquí


function remove_accents($string) { $a = ''ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖØÙÚÛÜÝÞßàáâãäåæçèéêëìíîïðñòóôõöøùúûýýþÿŔŕ''; $b = ''aaaaaaaceeeeiiiidnoooooouuuuybsaaaaaaaceeeeiiiidnoooooouuuyybyRr''; $string = strtr(utf8_decode($string), utf8_decode($a), $b); return utf8_encode($string); } function format_slug($title) { $title = remove_accents($title); $title = trim(strtolower($title)); $title = preg_replace(''#[^a-z0-9//-/]#i'', ''_'', $title); return trim(preg_replace(''/-+/'', ''-'', $title), ''-/''); }

utilizar: echo format_slug ($ var);


function seourl($phrase, $maxLength = 100000000000000) { $result = strtolower($phrase); $result = preg_replace("~[^A-Za-z0-9-/s]~", "", $result); $result = trim(preg_replace("~[/s-]+~", " ", $result)); $result = trim(substr($result, 0, $maxLength)); $result = preg_replace("~/s~", "-", $result); return $result; }


setlocale(LC_ALL, ''en_US.UTF8''); function slugify($text) { // replace non letter or digits by - $text = preg_replace(''~[^//pL/d]+~u'', ''-'', $text); // trim $text = trim($text, ''-''); // transliterate $text = iconv(''utf-8'', ''us-ascii//TRANSLIT'', $text); // lowercase $text = strtolower($text); // remove unwanted characters $text = preg_replace(''~[^-/w]+~'', '''', $text); if (empty($text)) { return ''n-a''; } return $text; } $slug = slugify($var);