슬러그를 만드는 PHP 함수 (URL 문자열)
PHP슬러그를 만드는 PHP 함수 (URL 문자열)
function gen_slug($str){
# special accents
$a = array('À','Á','Â','Ã','Ä','Å','Æ','Ç','È','É','Ê','Ë','Ì','Í','Î','Ï','Ð','Ñ','Ò','Ó','Ô','Õ','Ö','Ø','Ù','Ú','Û','Ü','Ý','ß','à','á','â','ã','ä','å','æ','ç','è','é','ê','ë','ì','í','î','ï','ñ','ò','ó','ô','õ','ö','ø','ù','ú','û','ü','ý','ÿ','A','a','A','a','A','a','C','c','C','c','C','c','C','c','D','d','Ð','d','E','e','E','e','E','e','E','e','E','e','G','g','G','g','G','g','G','g','H','h','H','h','I','i','I','i','I','i','I','i','I','i','?','?','J','j','K','k','L','l','L','l','L','l','?','?','L','l','N','n','N','n','N','n','?','O','o','O','o','O','o','Œ','œ','R','r','R','r','R','r','S','s','S','s','S','s','Š','š','T','t','T','t','T','t','U','u','U','u','U','u','U','u','U','u','U','u','W','w','Y','y','Ÿ','Z','z','Z','z','Ž','ž','?','ƒ','O','o','U','u','A','a','I','i','O','o','U','u','U','u','U','u','U','u','U','u','?','?','?','?','?','?');
$b = array('A','A','A','A','A','A','AE','C','E','E','E','E','I','I','I','I','D','N','O','O','O','O','O','O','U','U','U','U','Y','s','a','a','a','a','a','a','ae','c','e','e','e','e','i','i','i','i','n','o','o','o','o','o','o','u','u','u','u','y','y','A','a','A','a','A','a','C','c','C','c','C','c','C','c','D','d','D','d','E','e','E','e','E','e','E','e','E','e','G','g','G','g','G','g','G','g','H','h','H','h','I','i','I','i','I','i','I','i','I','i','IJ','ij','J','j','K','k','L','l','L','l','L','l','L','l','l','l','N','n','N','n','N','n','n','O','o','O','o','O','o','OE','oe','R','r','R','r','R','r','S','s','S','s','S','s','S','s','T','t','T','t','T','t','U','u','U','u','U','u','U','u','U','u','U','u','W','w','Y','y','Y','Z','z','Z','z','Z','z','s','f','O','o','U','u','A','a','I','i','O','o','U','u','U','u','U','u','U','u','U','u','A','a','AE','ae','O','o');
return strtolower(preg_replace(array('/[^a-zA-Z0-9 -]/','/[ -]+/','/^-|-$/'),array('','-',''),str_replace($a,$b,$str)));
}
훌륭하게 작동하지만 실패한 경우가 있습니다.
gen_slug ( 'andrés')는 andres 대신 andras를 반환합니다.
왜? preg_replace 매개 변수에 대한 아이디어가 있습니까?
해결법
-
==============================
1.오래 걸리는 교체 대신 다음 중 하나를 시도하십시오.
오래 걸리는 교체 대신 다음 중 하나를 시도하십시오.
public static function slugify($text) { // replace non letter or digits by - $text = preg_replace('~[^\pL\d]+~u', '-', $text); // transliterate $text = iconv('utf-8', 'us-ascii//TRANSLIT', $text); // remove unwanted characters $text = preg_replace('~[^-\w]+~', '', $text); // trim $text = trim($text, '-'); // remove duplicate - $text = preg_replace('~-+~', '-', $text); // lowercase $text = strtolower($text); if (empty($text)) { return 'n-a'; } return $text; }
이것은 Symfony의 Jobeet 튜토리얼에 기반을두고 있습니다.
-
==============================
2.intl 확장을 설치했다면 transliterator_transliterate 함수를 사용하여 쉽게 슬러그를 만들 수 있습니다.
intl 확장을 설치했다면 transliterator_transliterate 함수를 사용하여 쉽게 슬러그를 만들 수 있습니다.
공백을 나중에 슬래그처럼 만들기 위해 대시로 바꿀 수 있습니다.
<?php $string = "andrés"; $string = transliterator_transliterate("Any-Latin; NFD; [:Nonspacing Mark:] Remove; NFC; [:Punctuation:] Remove; Lower();", $string); echo $string; ?>
-
==============================
3.어때요 ...
어때요 ...
$slug = strtolower(trim(preg_replace('/[^A-Za-z0-9-]+/', '-', $string)));
?
-
==============================
4.참고 : 나는 이것을 wordpress에서 가져 왔고 그것은 작동한다 !!
참고 : 나는 이것을 wordpress에서 가져 왔고 그것은 작동한다 !!
다음과 같이 사용하십시오.
echo sanitize('testing this link');
암호
//taken from wordpress function utf8_uri_encode( $utf8_string, $length = 0 ) { $unicode = ''; $values = array(); $num_octets = 1; $unicode_length = 0; $string_length = strlen( $utf8_string ); for ($i = 0; $i < $string_length; $i++ ) { $value = ord( $utf8_string[ $i ] ); if ( $value < 128 ) { if ( $length && ( $unicode_length >= $length ) ) break; $unicode .= chr($value); $unicode_length++; } else { if ( count( $values ) == 0 ) $num_octets = ( $value < 224 ) ? 2 : 3; $values[] = $value; if ( $length && ( $unicode_length + ($num_octets * 3) ) > $length ) break; if ( count( $values ) == $num_octets ) { if ($num_octets == 3) { $unicode .= '%' . dechex($values[0]) . '%' . dechex($values[1]) . '%' . dechex($values[2]); $unicode_length += 9; } else { $unicode .= '%' . dechex($values[0]) . '%' . dechex($values[1]); $unicode_length += 6; } $values = array(); $num_octets = 1; } } } return $unicode; } //taken from wordpress function seems_utf8($str) { $length = strlen($str); for ($i=0; $i < $length; $i++) { $c = ord($str[$i]); if ($c < 0x80) $n = 0; # 0bbbbbbb elseif (($c & 0xE0) == 0xC0) $n=1; # 110bbbbb elseif (($c & 0xF0) == 0xE0) $n=2; # 1110bbbb elseif (($c & 0xF8) == 0xF0) $n=3; # 11110bbb elseif (($c & 0xFC) == 0xF8) $n=4; # 111110bb elseif (($c & 0xFE) == 0xFC) $n=5; # 1111110b else return false; # Does not match any model for ($j=0; $j<$n; $j++) { # n bytes matching 10bbbbbb follow ? if ((++$i == $length) || ((ord($str[$i]) & 0xC0) != 0x80)) return false; } } return true; } //function sanitize_title_with_dashes taken from wordpress function sanitize($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); if (seems_utf8($title)) { if (function_exists('mb_strtolower')) { $title = mb_strtolower($title, 'UTF-8'); } $title = utf8_uri_encode($title, 200); } $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; }
-
==============================
5.다른 하나는 예를 들어 "이상한 문자가있는 제목"이 "제목이 이상한 문자 - eee-a-x-z"가됩니다.
다른 하나는 예를 들어 "이상한 문자가있는 제목"이 "제목이 이상한 문자 - eee-a-x-z"가됩니다.
/** * Function used to create a slug associated to an "ugly" string. * * @param string $string the string to transform. * * @return string the resulting slug. */ public static function createSlug($string) { $table = array( 'Š'=>'S', 'š'=>'s', 'Đ'=>'Dj', 'đ'=>'dj', 'Ž'=>'Z', 'ž'=>'z', 'Č'=>'C', 'č'=>'c', 'Ć'=>'C', 'ć'=>'c', 'À'=>'A', 'Á'=>'A', 'Â'=>'A', 'Ã'=>'A', 'Ä'=>'A', 'Å'=>'A', 'Æ'=>'A', 'Ç'=>'C', 'È'=>'E', 'É'=>'E', 'Ê'=>'E', 'Ë'=>'E', 'Ì'=>'I', 'Í'=>'I', 'Î'=>'I', 'Ï'=>'I', 'Ñ'=>'N', 'Ò'=>'O', 'Ó'=>'O', 'Ô'=>'O', 'Õ'=>'O', 'Ö'=>'O', 'Ø'=>'O', 'Ù'=>'U', 'Ú'=>'U', 'Û'=>'U', 'Ü'=>'U', 'Ý'=>'Y', 'Þ'=>'B', 'ß'=>'Ss', 'à'=>'a', 'á'=>'a', 'â'=>'a', 'ã'=>'a', 'ä'=>'a', 'å'=>'a', 'æ'=>'a', 'ç'=>'c', 'è'=>'e', 'é'=>'e', 'ê'=>'e', 'ë'=>'e', 'ì'=>'i', 'í'=>'i', 'î'=>'i', 'ï'=>'i', 'ð'=>'o', 'ñ'=>'n', 'ò'=>'o', 'ó'=>'o', 'ô'=>'o', 'õ'=>'o', 'ö'=>'o', 'ø'=>'o', 'ù'=>'u', 'ú'=>'u', 'û'=>'u', 'ý'=>'y', 'ý'=>'y', 'þ'=>'b', 'ÿ'=>'y', 'Ŕ'=>'R', 'ŕ'=>'r', '/' => '-', ' ' => '-' ); // -- Remove duplicated spaces $stripped = preg_replace(array('/\s{2,}/', '/[\t\n]/'), ' ', $string); // -- Returns the slug return strtolower(strtr($string, $table)); }
-
==============================
6.@Imran Omar Bukhsh 코드의 최신 버전 (최신 Wordpress (4.0) 브랜치) :
@Imran Omar Bukhsh 코드의 최신 버전 (최신 Wordpress (4.0) 브랜치) :
<?php // Add methods to slugify taken from Wordpress: // - https://github.com/WordPress/WordPress/blob/master/wp-includes/formatting.php // - https://github.com/WordPress/WordPress/blob/master/wp-includes/functions.php /** * Set the mbstring internal encoding to a binary safe encoding when func_overload * is enabled. * * When mbstring.func_overload is in use for multi-byte encodings, the results from * strlen() and similar functions respect the utf8 characters, causing binary data * to return incorrect lengths. * * This function overrides the mbstring encoding to a binary-safe encoding, and * resets it to the users expected encoding afterwards through the * `reset_mbstring_encoding` function. * * It is safe to recursively call this function, however each * `mbstring_binary_safe_encoding()` call must be followed up with an equal number * of `reset_mbstring_encoding()` calls. * * @since 3.7.0 * * @see reset_mbstring_encoding() * * @param bool $reset Optional. Whether to reset the encoding back to a previously-set encoding. * Default false. */ function mbstring_binary_safe_encoding( $reset = false ) { static $encodings = array(); static $overloaded = null; if ( is_null( $overloaded ) ) $overloaded = function_exists( 'mb_internal_encoding' ) && ( ini_get( 'mbstring.func_overload' ) & 2 ); if ( false === $overloaded ) return; if ( ! $reset ) { $encoding = mb_internal_encoding(); array_push( $encodings, $encoding ); mb_internal_encoding( 'ISO-8859-1' ); } if ( $reset && $encodings ) { $encoding = array_pop( $encodings ); mb_internal_encoding( $encoding ); } } /** * Reset the mbstring internal encoding to a users previously set encoding. * * @see mbstring_binary_safe_encoding() * * @since 3.7.0 */ function reset_mbstring_encoding() { mbstring_binary_safe_encoding( true ); } /** * Checks to see if a string is utf8 encoded. * * NOTE: This function checks for 5-Byte sequences, UTF8 * has Bytes Sequences with a maximum length of 4. * * @author bmorel at ssi dot fr (modified) * @since 1.2.1 * * @param string $str The string to be checked * @return bool True if $str fits a UTF-8 model, false otherwise. */ function seems_utf8($str) { mbstring_binary_safe_encoding(); $length = strlen($str); reset_mbstring_encoding(); for ($i=0; $i < $length; $i++) { $c = ord($str[$i]); if ($c < 0x80) $n = 0; # 0bbbbbbb elseif (($c & 0xE0) == 0xC0) $n=1; # 110bbbbb elseif (($c & 0xF0) == 0xE0) $n=2; # 1110bbbb elseif (($c & 0xF8) == 0xF0) $n=3; # 11110bbb elseif (($c & 0xFC) == 0xF8) $n=4; # 111110bb elseif (($c & 0xFE) == 0xFC) $n=5; # 1111110b else return false; # Does not match any model for ($j=0; $j<$n; $j++) { # n bytes matching 10bbbbbb follow ? if ((++$i == $length) || ((ord($str[$i]) & 0xC0) != 0x80)) return false; } } return true; } /** * Encode the Unicode values to be used in the URI. * * @since 1.5.0 * * @param string $utf8_string * @param int $length Max length of the string * @return string String with Unicode encoded for URI. */ function utf8_uri_encode( $utf8_string, $length = 0 ) { $unicode = ''; $values = array(); $num_octets = 1; $unicode_length = 0; mbstring_binary_safe_encoding(); $string_length = strlen( $utf8_string ); reset_mbstring_encoding(); for ($i = 0; $i < $string_length; $i++ ) { $value = ord( $utf8_string[ $i ] ); if ( $value < 128 ) { if ( $length && ( $unicode_length >= $length ) ) break; $unicode .= chr($value); $unicode_length++; } else { if ( count( $values ) == 0 ) $num_octets = ( $value < 224 ) ? 2 : 3; $values[] = $value; if ( $length && ( $unicode_length + ($num_octets * 3) ) > $length ) break; if ( count( $values ) == $num_octets ) { if ($num_octets == 3) { $unicode .= '%' . dechex($values[0]) . '%' . dechex($values[1]) . '%' . dechex($values[2]); $unicode_length += 9; } else { $unicode .= '%' . dechex($values[0]) . '%' . dechex($values[1]); $unicode_length += 6; } $values = array(); $num_octets = 1; } } } return $unicode; } /** * Sanitizes a title, replacing whitespace and a few other characters with dashes. * * Limits the output to alphanumeric characters, underscore (_) and dash (-). * Whitespace becomes a dash. * * @since 1.2.0 * * @param string $title The title to be sanitized. * @param string $raw_title Optional. Not used. * @param string $context Optional. The operation for which the string is sanitized. * @return string The sanitized title. */ function sanitize_title_with_dashes( $title, $raw_title = '', $context = 'display' ) { $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); if (seems_utf8($title)) { if (function_exists('mb_strtolower')) { $title = mb_strtolower($title, 'UTF-8'); } $title = utf8_uri_encode($title, 200); } $title = strtolower($title); $title = preg_replace('/&.+?;/', '', $title); // kill entities $title = str_replace('.', '-', $title); if ( 'save' == $context ) { // Convert nbsp, ndash and mdash to hyphens $title = str_replace( array( '%c2%a0', '%e2%80%93', '%e2%80%94' ), '-', $title ); // Strip these characters entirely $title = str_replace( array( // iexcl and iquest '%c2%a1', '%c2%bf', // angle quotes '%c2%ab', '%c2%bb', '%e2%80%b9', '%e2%80%ba', // curly quotes '%e2%80%98', '%e2%80%99', '%e2%80%9c', '%e2%80%9d', '%e2%80%9a', '%e2%80%9b', '%e2%80%9e', '%e2%80%9f', // copy, reg, deg, hellip and trade '%c2%a9', '%c2%ae', '%c2%b0', '%e2%80%a6', '%e2%84%a2', // acute accents '%c2%b4', '%cb%8a', '%cc%81', '%cd%81', // grave accent, macron, caron '%cc%80', '%cc%84', '%cc%8c', ), '', $title ); // Convert times to x $title = str_replace( '%c3%97', 'x', $title ); } $title = preg_replace('/[^%a-z0-9 _-]/', '', $title); $title = preg_replace('/\s+/', '-', $title); $title = preg_replace('|-+|', '-', $title); $title = trim($title, '-'); return $title; } $title = '#PFW Alexander McQueen Spring/Summer 2015'; echo "title -> slug: \n". $title ." -> ". sanitize_title_with_dashes($title); echo "\n\n"; $title = '«GQ»: Elyas M\'Barek gehört zu Männern des Jahres'; echo "title -> slug: \n". $title ." -> ". sanitize_title_with_dashes($title);
온라인 예제보기.
-
==============================
7.이것을 위해 preg_replace를 사용하지 마십시오. PHP 함수는 태스크를 위해서 만들어진 것입니다 : strtr () http://php.net/manual/en/function.strtr.php
이것을 위해 preg_replace를 사용하지 마십시오. PHP 함수는 태스크를 위해서 만들어진 것입니다 : strtr () http://php.net/manual/en/function.strtr.php
위의 링크에있는 주석에서 가져온 것입니다 (그리고 저는 직접 테스트했는데 작동합니다 :
function normalize ($string) { $table = array( 'Š'=>'S', 'š'=>'s', 'Đ'=>'Dj', 'đ'=>'dj', 'Ž'=>'Z', 'ž'=>'z', 'Č'=>'C', 'č'=>'c', 'Ć'=>'C', 'ć'=>'c', 'À'=>'A', 'Á'=>'A', 'Â'=>'A', 'Ã'=>'A', 'Ä'=>'A', 'Å'=>'A', 'Æ'=>'A', 'Ç'=>'C', 'È'=>'E', 'É'=>'E', 'Ê'=>'E', 'Ë'=>'E', 'Ì'=>'I', 'Í'=>'I', 'Î'=>'I', 'Ï'=>'I', 'Ñ'=>'N', 'Ò'=>'O', 'Ó'=>'O', 'Ô'=>'O', 'Õ'=>'O', 'Ö'=>'O', 'Ø'=>'O', 'Ù'=>'U', 'Ú'=>'U', 'Û'=>'U', 'Ü'=>'U', 'Ý'=>'Y', 'Þ'=>'B', 'ß'=>'Ss', 'à'=>'a', 'á'=>'a', 'â'=>'a', 'ã'=>'a', 'ä'=>'a', 'å'=>'a', 'æ'=>'a', 'ç'=>'c', 'è'=>'e', 'é'=>'e', 'ê'=>'e', 'ë'=>'e', 'ì'=>'i', 'í'=>'i', 'î'=>'i', 'ï'=>'i', 'ð'=>'o', 'ñ'=>'n', 'ò'=>'o', 'ó'=>'o', 'ô'=>'o', 'õ'=>'o', 'ö'=>'o', 'ø'=>'o', 'ù'=>'u', 'ú'=>'u', 'û'=>'u', 'ý'=>'y', 'ý'=>'y', 'þ'=>'b', 'ÿ'=>'y', 'Ŕ'=>'R', 'ŕ'=>'r', ); return strtr($string, $table); }
-
==============================
8.나는 다음을 사용하고있다.
나는 다음을 사용하고있다.
function slugify($text) { $text = iconv('utf-8', 'us-ascii//TRANSLIT', $text); return strtolower(preg_replace('/[^A-Za-z0-9-]+/', '-', $text)); }
오로지 키릴 문자가 변환되지 않는다는 점만 제외하면 모든 단일 키릴 문자에 대해 긴 str_replace가 아닌 솔루션을 찾고 있습니다.
-
==============================
9.항상 많은 고급 개발자가 지원하는 기존 솔루션을 사용하는 것이 좋습니다. 가장 인기있는 것은 https://github.com/cocur/sluify입니다. 우선 그것은 하나 이상의 언어를 지원하며 업데이트 중입니다.
항상 많은 고급 개발자가 지원하는 기존 솔루션을 사용하는 것이 좋습니다. 가장 인기있는 것은 https://github.com/cocur/sluify입니다. 우선 그것은 하나 이상의 언어를 지원하며 업데이트 중입니다.
전체 패키지를 사용하지 않으려면 필요한 부분 만 복사하면됩니다.
-
==============================
10.
public static function slugify ($text) { $replace = [ '<' => '', '>' => '', ''' => '', '&' => '', '"' => '', 'À' => 'A', 'Á' => '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', 'Ė' => 'E', 'Ĝ' => 'G', 'Ğ' => 'G', 'Ġ' => 'G', 'Ģ' => 'G', 'Ĥ' => 'H', 'Ħ' => 'H', 'Ì' => 'I', 'Í' => 'I', 'Î' => 'I', 'Ï' => 'I', 'Ī' => 'I', 'Ĩ' => 'I', 'Ĭ' => 'I', 'Į' => 'I', 'İ' => 'I', 'IJ' => 'IJ', 'Ĵ' => 'J', 'Ķ' => 'K', 'Ł' => 'K', 'Ľ' => 'K', 'Ĺ' => 'K', 'Ļ' => 'K', 'Ŀ' => 'K', 'Ñ' => 'N', 'Ń' => 'N', 'Ň' => 'N', 'Ņ' => 'N', 'Ŋ' => 'N', 'Ò' => 'O', 'Ó' => 'O', 'Ô' => 'O', 'Õ' => 'O', 'Ö' => 'Oe', 'Ö' => 'Oe', 'Ø' => 'O', 'Ō' => 'O', 'Ő' => 'O', 'Ŏ' => 'O', 'Œ' => 'OE', 'Ŕ' => 'R', 'Ř' => 'R', 'Ŗ' => 'R', 'Ś' => 'S', 'Š' => 'S', 'Ş' => 'S', 'Ŝ' => 'S', 'Ș' => 'S', 'Ť' => 'T', 'Ţ' => 'T', 'Ŧ' => 'T', 'Ț' => 'T', 'Ù' => 'U', 'Ú' => 'U', 'Û' => 'U', 'Ü' => 'Ue', 'Ū' => 'U', 'Ü' => 'Ue', 'Ů' => 'U', 'Ű' => 'U', 'Ŭ' => 'U', 'Ũ' => 'U', 'Ų' => 'U', 'Ŵ' => 'W', 'Ý' => 'Y', 'Ŷ' => 'Y', 'Ÿ' => 'Y', 'Ź' => 'Z', 'Ž' => 'Z', 'Ż' => 'Z', 'Þ' => 'T', 'à' => 'a', 'á' => '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', 'ė' => 'e', 'ƒ' => 'f', 'ĝ' => 'g', 'ğ' => 'g', 'ġ' => 'g', 'ģ' => 'g', 'ĥ' => 'h', 'ħ' => 'h', 'ì' => 'i', 'í' => 'i', 'î' => 'i', 'ï' => 'i', 'ī' => 'i', 'ĩ' => 'i', 'ĭ' => 'i', 'į' => 'i', 'ı' => 'i', 'ij' => 'ij', 'ĵ' => 'j', 'ķ' => 'k', 'ĸ' => 'k', 'ł' => 'l', 'ľ' => 'l', 'ĺ' => 'l', 'ļ' => 'l', 'ŀ' => 'l', 'ñ' => 'n', 'ń' => 'n', 'ň' => 'n', 'ņ' => 'n', 'ʼn' => 'n', 'ŋ' => 'n', 'ò' => 'o', 'ó' => 'o', 'ô' => 'o', 'õ' => 'o', 'ö' => 'oe', 'ö' => 'oe', 'ø' => 'o', 'ō' => 'o', 'ő' => 'o', 'ŏ' => 'o', 'œ' => 'oe', 'ŕ' => 'r', 'ř' => 'r', 'ŗ' => 'r', 'š' => 's', 'ù' => 'u', 'ú' => 'u', 'û' => 'u', 'ü' => 'ue', 'ū' => 'u', 'ü' => 'ue', 'ů' => 'u', 'ű' => 'u', 'ŭ' => 'u', 'ũ' => 'u', 'ų' => 'u', 'ŵ' => 'w', 'ý' => 'y', 'ÿ' => 'y', 'ŷ' => 'y', 'ž' => 'z', 'ż' => 'z', 'ź' => 'z', 'þ' => 't', 'ß' => 'ss', 'ſ' => 'ss', 'ый' => 'iy', 'А' => 'A', 'Б' => 'B', 'В' => 'V', 'Г' => 'G', 'Д' => 'D', 'Е' => 'E', 'Ё' => 'YO', 'Ж' => 'ZH', 'З' => 'Z', 'И' => 'I', 'Й' => 'Y', 'К' => 'K', 'Л' => 'L', 'М' => 'M', 'Н' => 'N', 'О' => 'O', 'П' => 'P', 'Р' => 'R', 'С' => 'S', 'Т' => 'T', 'У' => 'U', 'Ф' => 'F', 'Х' => 'H', 'Ц' => 'C', 'Ч' => 'CH', 'Ш' => 'SH', 'Щ' => 'SCH', 'Ъ' => '', 'Ы' => 'Y', 'Ь' => '', 'Э' => 'E', 'Ю' => 'YU', 'Я' => 'YA', 'а' => 'a', 'б' => 'b', 'в' => 'v', 'г' => 'g', 'д' => 'd', 'е' => 'e', 'ё' => 'yo', 'ж' => 'zh', 'з' => 'z', 'и' => 'i', 'й' => 'y', 'к' => 'k', 'л' => 'l', 'м' => 'm', 'н' => 'n', 'о' => 'o', 'п' => 'p', 'р' => 'r', 'с' => 's', 'т' => 't', 'у' => 'u', 'ф' => 'f', 'х' => 'h', 'ц' => 'c', 'ч' => 'ch', 'ш' => 'sh', 'щ' => 'sch', 'ъ' => '', 'ы' => 'y', 'ь' => '', 'э' => 'e', 'ю' => 'yu', 'я' => 'ya' ]; // make a human readable string $text = strtr($text, $replace); // replace non letter or digits by - $text = preg_replace('~[^\\pL\d.]+~u', '-', $text); // trim $text = trim($text, '-'); // remove unwanted characters $text = preg_replace('~[^-\w.]+~', '', $text); $text = strtolower($text); return $text; }
-
==============================
11.Normalizer :: normalize ()를 볼 수 있습니다. 여기를 참고하십시오. PHP를위한 intl 모듈을로드하기 만하면됩니다.
Normalizer :: normalize ()를 볼 수 있습니다. 여기를 참고하십시오. PHP를위한 intl 모듈을로드하기 만하면됩니다.
-
==============================
12.코어에 이미 구현 된 것을 사용하는 것은 어떻습니까?
코어에 이미 구현 된 것을 사용하는 것은 어떻습니까?
//Clean non UTF-8 characters Mage::getHelper('core/string')->cleanString($str)
또는 핵심 URL / URL 재 작성 방법 중 하나.
-
==============================
13.특수 문자를 다루는 좋은 해결책이 있습니다.
특수 문자를 다루는 좋은 해결책이 있습니다.
환상적인 텍스트 => 텍스트 환상적인
function slugify( $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; }
저자 : Natxet
-
==============================
14.gTLD와 IDN이 점점 더 많이 사용되고 있기 때문에 URL에 Andrés가 포함되어서는 안되는 이유를 알 수 없습니다.
gTLD와 IDN이 점점 더 많이 사용되고 있기 때문에 URL에 Andrés가 포함되어서는 안되는 이유를 알 수 없습니다.
대신 원하는 URL을 HTML로 만듭니다. 대부분의 브라우저는 UTF-8 문자를 URL에 표시합니다 (예 : 고대 IE6이 아님). bit.ly / goo.gl은 광고 목적으로 사용하거나 광고에 쓸 필요가있을 경우 러시아어 및 아랍어와 같은 경우에 짧게 사용할 수 있습니다. 같은 사용자가 브라우저 URL에 글을 쓸 수 있습니다.
유일한 차이점은 공백입니다. 허용하고 싶지 않으면 "-"와 "/"로 대체하는 것이 좋습니다.
<?php function slugify($url) { $url = trim($url); $url = str_replace(" ","-",$url); $url = str_replace("/","-slash-",$url); $url = rawurlencode($url); } ?>
인코딩 된 URL http://www.hurtta.com/RU/%D0%9F%D1%80%D0%BE%D0%B4%D1%83%D0%BA%D1%82%D1%8B/
URL은 http://www.hurtta.com/RU/PDF/로 작성되었습니다.
-
==============================
15.저는 Maerlyn의 답변에 근거하여 이것을 썼습니다. 이 기능은 페이지의 문자 인코딩과 상관없이 작동합니다. 또한 작은 따옴표를 대시로 바꾸지 않습니다 :)
저는 Maerlyn의 답변에 근거하여 이것을 썼습니다. 이 기능은 페이지의 문자 인코딩과 상관없이 작동합니다. 또한 작은 따옴표를 대시로 바꾸지 않습니다 :)
function slugify ($string) { $string = utf8_encode($string); $string = iconv('UTF-8', 'ASCII//TRANSLIT', $string); $string = preg_replace('/[^a-z0-9- ]/i', '', $string); $string = str_replace(' ', '-', $string); $string = trim($string, '-'); $string = strtolower($string); if (empty($string)) { return 'n-a'; } return $string; }
-
==============================
16.내 localhost에서 모든 것이 괜찮 았지만 서버에서 "set_locale"과 "utf-8"을 "mb_strtolower"에서 도와주었습니다.
내 localhost에서 모든 것이 괜찮 았지만 서버에서 "set_locale"과 "utf-8"을 "mb_strtolower"에서 도와주었습니다.
<? setlocale( LC_ALL, "en_US.UTF8" ); function slug( $string ) { $string = iconv( "utf-8", "us-ascii//translit//ignore", $string ); // transliterate $string = str_replace( "'", "", $string ); $string = preg_replace( "~[^\pL\d]+~u", "-", $string ); // replace non letter or non digits by "-" $string = preg_replace( "~[^-\w]+~", "", $string ); // remove unwanted characters $string = preg_replace( "~-+~", "-", $string ); // remove duplicate "-" $string = trim( $string, "-" ); // trim "-" $string = trim( $string ); // trim $string = mb_strtolower( $string, "utf-8" ); // lowercase $string = urlencode( $string ); // safe return $string; }; ?>
-
==============================
17.가장 우아한 방법은 Behat \ Transliterator \ Transliterator를 사용하는 것입니다.
가장 우아한 방법은 Behat \ Transliterator \ Transliterator를 사용하는 것입니다.
이 클래스는 추상 클래스이기 때문에 클래스를 확장해야합니다. 다음과 같습니다.
<?php use Behat\Transliterator\Transliterator; class Urlizer extends Transliterator { }
그런 다음 사용하십시오.
$text = "Master Ápiu"; $urlizer = new Urlizer(); $slug = $urlizer->transliterate($slug, "-"); echo $slug; // master-apiu
물론 당신은 작곡가에게도이 것들을 넣어야합니다.
composer require behat/transliterator
자세한 정보는 https://github.com/Behat/Transliterator를 참조하십시오.
-
==============================
18.스페인어 웹 사이트에서 작동하는 작업 코드가 있습니다. 내 블로그의 코드를 참조하십시오.
스페인어 웹 사이트에서 작동하는 작업 코드가 있습니다. 내 블로그의 코드를 참조하십시오.
중복 검사를 통해 문자열에서 깨끗한 URL 슬러그를 생성하는 기능
from https://stackoverflow.com/questions/2955251/php-function-to-make-slug-url-string by cc-by-sa and MIT license
'PHP' 카테고리의 다른 글
php 여러 공백을 하나의 공백으로 바꾸기 (0) | 2018.09.16 |
---|---|
URL에 http : //를 추가하는 방법은 무엇입니까? (0) | 2018.09.16 |
PHP MySQL의 Google 차트 JSON - 전체 예제 (0) | 2018.09.16 |
PHP에서 쓰레드 안전하거나 쓰레드 안전하지 않은 것은 무엇입니까? (0) | 2018.09.16 |
PHP : 경고 : sort ()는 매개 변수 1이 배열이고, 주어진 자원이 [duplicate] (0) | 2018.09.16 |