복붙노트

슬러그를 만드는 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. ==============================

    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. ==============================

    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. ==============================

    3.어때요 ...

    어때요 ...

    $slug = strtolower(trim(preg_replace('/[^A-Za-z0-9-]+/', '-', $string)));
    

    ?

  4. ==============================

    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. ==============================

    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. ==============================

    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. ==============================

    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. ==============================

    8.나는 다음을 사용하고있다.

    나는 다음을 사용하고있다.

    function slugify($text)
    { 
        $text = iconv('utf-8', 'us-ascii//TRANSLIT', $text);
        return strtolower(preg_replace('/[^A-Za-z0-9-]+/', '-', $text));
    }
    

    오로지 키릴 문자가 변환되지 않는다는 점만 제외하면 모든 단일 키릴 문자에 대해 긴 str_replace가 아닌 솔루션을 찾고 있습니다.

  9. ==============================

    9.항상 많은 고급 개발자가 지원하는 기존 솔루션을 사용하는 것이 좋습니다. 가장 인기있는 것은 https://github.com/cocur/sluify입니다. 우선 그것은 하나 이상의 언어를 지원하며 업데이트 중입니다.

    항상 많은 고급 개발자가 지원하는 기존 솔루션을 사용하는 것이 좋습니다. 가장 인기있는 것은 https://github.com/cocur/sluify입니다. 우선 그것은 하나 이상의 언어를 지원하며 업데이트 중입니다.

    전체 패키지를 사용하지 않으려면 필요한 부분 만 복사하면됩니다.

  10. ==============================

    10.

    public static function slugify ($text) {
    
        $replace = [
            '&lt;' => '', '&gt;' => '', '&#039;' => '', '&amp;' => '',
            '&quot;' => '', 'À' => 'A', 'Á' => 'A', 'Â' => 'A', 'Ã' => 'A', 'Ä'=> 'Ae',
            '&Auml;' => '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', '&Ouml;' => 'Oe', 'Ø' => 'O', 'Ō' => 'O', 'Ő' => 'O', 'Ŏ' => 'O',
            'Œ' => 'OE', 'Ŕ' => 'R', 'Ř' => 'R', 'Ŗ' => 'R', 'Ś' => 'S', 'Š' => 'S',
            'Ş' => 'S', 'Ŝ' => 'S', 'Ș' => 'S', 'Ť' => 'T', 'Ţ' => 'T', 'Ŧ' => 'T',
            'Ț' => 'T', 'Ù' => 'U', 'Ú' => 'U', 'Û' => 'U', 'Ü' => 'Ue', 'Ū' => 'U',
            '&Uuml;' => 'Ue', 'Ů' => 'U', 'Ű' => 'U', 'Ŭ' => 'U', 'Ũ' => 'U', 'Ų' => 'U',
            'Ŵ' => 'W', 'Ý' => 'Y', 'Ŷ' => 'Y', 'Ÿ' => 'Y', 'Ź' => 'Z', 'Ž' => 'Z',
            'Ż' => 'Z', 'Þ' => 'T', 'à' => 'a', 'á' => 'a', 'â' => 'a', 'ã' => 'a',
            'ä' => 'ae', '&auml;' => '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',
            '&ouml;' => 'oe', 'ø' => 'o', 'ō' => 'o', 'ő' => 'o', 'ŏ' => 'o', 'œ' => 'oe',
            'ŕ' => 'r', 'ř' => 'r', 'ŗ' => 'r', 'š' => 's', 'ù' => 'u', 'ú' => 'u',
            'û' => 'u', 'ü' => 'ue', 'ū' => 'u', '&uuml;' => '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. ==============================

    11.Normalizer :: normalize ()를 볼 수 있습니다. 여기를 참고하십시오. PHP를위한 intl 모듈을로드하기 만하면됩니다.

    Normalizer :: normalize ()를 볼 수 있습니다. 여기를 참고하십시오. PHP를위한 intl 모듈을로드하기 만하면됩니다.

  12. ==============================

    12.코어에 이미 구현 된 것을 사용하는 것은 어떻습니까?

    코어에 이미 구현 된 것을 사용하는 것은 어떻습니까?

    //Clean non UTF-8 characters    
    Mage::getHelper('core/string')->cleanString($str)
    

    또는 핵심 URL / URL 재 작성 방법 중 하나.

  13. ==============================

    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. ==============================

    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. ==============================

    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. ==============================

    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. ==============================

    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. ==============================

    18.스페인어 웹 사이트에서 작동하는 작업 코드가 있습니다. 내 블로그의 코드를 참조하십시오.

    스페인어 웹 사이트에서 작동하는 작업 코드가 있습니다. 내 블로그의 코드를 참조하십시오.

    중복 검사를 통해 문자열에서 깨끗한 URL 슬러그를 생성하는 기능

  19. from https://stackoverflow.com/questions/2955251/php-function-to-make-slug-url-string by cc-by-sa and MIT license