স্লাগ তৈরি করতে পিএইচপি ফাংশন (ইউআরএল স্ট্রিং)


166

আমি ইউনিকোড স্ট্রিং থেকে স্লাগগুলি তৈরির জন্য একটি ফাংশন রাখতে চাই, যেমন gen_slug('Andrés Cortez')ফিরে আসা উচিত andres-cortez। আমি এটা কিভাবে করব?


2
আমার জন্য 'আন্দ্রেস' ফিরিয়ে দেয়। তুমি নিশ্চিত?
টাইপনিয়ারর

আমি আপনার কোডটি এখানে অনুলিপি করেছি: Writecodeonline.com/php এবং এটির ফলাফলগুলি andres। আপনি কি নিশ্চিত যে আপনার ইনপুটটি ঠিক "andrés"?
নিকো

সরল পিএইচপি এ এটি কাজ করে। দুঃখিত, আমি উল্লেখ করতে ভুলে গেছি যে একটি ফাংশনটি আজাক্স ফাংশন সার্ভারের পক্ষ থেকে কার্যকর করা হচ্ছে। চরসেট বৈশিষ্ট্যের কারণে সমস্যাটি ঘটছে?
Andres এসকে

: এখানে সিরিলিক একটি ভাল কাজ সমাধান stackoverflow.com/questions/7461406/...
d.raev

1
আপনার নিজের সমাধান নির্মাণের পরিবর্তে, আপনি মত একটি বিদ্যমান গ্রন্থাগার ব্যবহার করতে পারেন github.com/cocur/slugify বা github.com/ausi/slug-generator
ausi

উত্তর:


443

দীর্ঘ প্রতিস্থাপনের পরিবর্তে, এটি ব্যবহার করে দেখুন:

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;
}

এটি সিমফোনির জবিয়েট টিউটোরিয়ালের একটি ভিত্তিক ছিল।


4
না, প্রথম পূর্ববর্তী স্থানটি অক্ষর বা একটি ডিজিট নয় এমন সমস্ত কিছু মুছে দেয়। ^উদ্বোধনী বন্ধনী ঠিক পরে নোট করুন - এটি ম্যাচ বিপরীত।
মার্লিন

11
iconv$textঅসি সমতুল্য না এমন অক্ষর থাকলে সঠিকভাবে রূপান্তর করবে না । উদাহরণস্বরূপ iconv('utf-8', 'us-ascii//TRANSLIT', "EFI收购Cretaprint")ফিরে আসবে "EFI"এবং একটি সতর্কতা ফাঁস হবে ।
কেন্ডল হপকিন্স

2
@ মার্লিন এবং অ্যান্ডুফো, আমি মনে করি প্রথম রেজেজেসে যদিও একটি অতিরিক্ত "\" আছে, সঠিক? '~ [^ \ PL \ d] + ~ u' হওয়া উচিত?
গ্রোভেনেক্টর

2
$text = trim($text, '-');শেষে হওয়া উচিত, অন্যথায় Foo 收হয়ে যায় foo-। এছাড়াও, Foo 收 Barহয়ে যায় foo--bar(পুনরাবৃত্তি -অপ্রয়োজনীয় বলে মনে হয়)।
rybo111

2
না না না না এটি কাজ করে না। প্রথম অভিব্যক্তি সমস্ত অক্ষর অক্ষর প্রতিস্থাপন করে। গ্রহণ করা উচিত নয়।
রোমেন ব্রুকার্ট

44

হালনাগাদ

যেহেতু এই উত্তরটি কিছুটা দৃষ্টি আকর্ষণ করছে, তাই আমি কিছু ব্যাখ্যা যুক্ত করছি।

প্রদত্ত সমাধানটি মূলত এজেড, অ্যাজ, 0-9, এবং - (হাইফেন) - - (হাইফেন) বাদে সমস্ত কিছু প্রতিস্থাপন করবে। সুতরাং, এটি অন্যান্য ইউনিকোড অক্ষরগুলির সাথে সঠিকভাবে কাজ করবে না (যা কোনও URL স্লাগ / স্ট্রিংয়ের জন্য বৈধ অক্ষর)। একটি সাধারণ দৃশ্যটি যখন ইনপুট স্ট্রিংটিতে অ-ইংরেজি অক্ষর থাকে।

কেবলমাত্র এই সমাধানটি ব্যবহার করুন যদি আপনি নিশ্চিত হন যে ইনপুট স্ট্রিংটিতে ইউনিকোড অক্ষর থাকবে না যা আপনি আউটপুট / স্লাগের অংশ হতে চান।

যেমন। "নারি শক্তি" "নারি-শক্তি" (বৈধ ইউআরএল স্লাগ) এর পরিবর্তে "----------" (সমস্ত হাইফেন) হয়ে যাবে।

আসল উত্তর

কেমন...

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

?


5
আসলে এটা করে। এই থ্রেডটি খুব অদ্ভুত ... গ্রহণযোগ্য উত্তরটি কাজ করে না, অন্য সমস্ত ধরণের ...
রোমেন ব্রুকার্ট

এটি শিরোনামে জিজ্ঞাসিত প্রশ্নের উত্তর সরবরাহ করে যা আমাকে এখানে নিয়ে গেছে এবং এই উত্তরটি আমার প্রয়োজনগুলির জন্য নিখুঁত ছিল।
এজিবি

1
কেবল এটির সাথে যোগ করার জন্য, 100% পরীক্ষিত নয়, আমি দেখতে পেয়েছি যদি আপনি প্রাথমিকভাবে সমস্ত স্থান ফাঁকা জায়গায় কোনও ড্যাশ দিয়ে প্রতিস্থাপন করেন, তবে এই ফাংশনটি অন্য কোনও অক্ষরকে খালি মানের সাথে প্রতিস্থাপনের জন্য মুছে ফেলার জন্য ব্যবহার করেছেন eg ''
জ্যাকব ডেভিড সি কানিংহাম

strtolower(trim(preg_replace('/[^A-Za-z0-9-]+/', '-', "Étienne")))"-tienne"পরিবর্তে ফিরে আসে "etienne", সুতরাং এটি উচ্চারণযুক্ত অক্ষরগুলির সাথে কাজ করে না।
জুলিয়েন

1
এইভাবে উত্পন্ন স্লাগগুলি কোনওভাবেই এসইও-বান্ধব বা ব্যবহারকারী-বান্ধব নয়। এছাড়াও, এগুলি বহু ভাষায় প্রচুর সংঘর্ষ সৃষ্টি করে, সঠিক প্রতিবর্ণের চেয়ে অনেক বেশি কারণ ঘটায়।

43

আপনার যদি ইন্টেল এক্সটেনশন ইনস্টল করা থাকে তবে আপনি সহজেই একটি স্লাগ তৈরি করতে ট্রান্সলিটর :: ট্রান্সলিট্রেট ফাংশন ব্যবহার করতে পারেন।

<?php
$string = 'Namnet på bildtävlingen';
$slug = \Transliterator::createFromRules(
    ':: Any-Latin;'
    . ':: NFD;'
    . ':: [:Nonspacing Mark:] Remove;'
    . ':: NFC;'
    . ':: [:Punctuation:] Remove;'
    . ':: Lower();'
    . '[:Separator:] > \'-\''
)
    ->transliterate( $string );
echo $slug; // namnet-pa-bildtavlingen
?>

17
বছরগুলিতে এই পোস্টে আগতদের জন্য ইন্টেল এক্সটেনশন পিএইচপি দিয়ে 5.3.0 থেকে বান্ডিল করা হবে। php.net/manual/en/intl.requirements.php
জেসেসডে

25

দ্রষ্টব্য: আমি এটি ওয়ার্ডপ্রেস থেকে নিয়েছি এবং এটি কার্যকর হয়!

এটি এর মতো ব্যবহার করুন:

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;
}

ওয়ার্ডপ্রেস 9.৯.১ এ (যা আমি ব্যবহার করছি) আমাকে কল করতে হবে sanitize_title_with_dashes($string, null, 'save')(অতিরিক্ত পরামিতিগুলি নোট করুন), অন্যথায় আপনি কিছু অগোছালো চরিত্রের কোড পেয়ে যান telstra%e2%80%99s-%e2%80%98all-roles-flex%e2%80%99। খুব সুন্দর না। :-(
সাইমন পূর্ব

1
@Czerasz থেকে এই পৃষ্ঠায় সম্পর্কিত উত্তরটি দেখুন । সাম্প্রতিক লিঙ্কগুলি: formatting.php এছাড়াও ফাংশন.
php

2
sanitizeএকটি স্লাগ তৈরির জন্য একটি অদ্ভুত, ভুলে যাওয়ার যোগ্য ফাংশন নাম।
rybo111

9

প্রচুর উচ্চ-স্তরের বিকাশকারী দ্বারা সমর্থিত বিদ্যমান সমাধানগুলি ব্যবহার করা সর্বদা একটি ভাল ধারণা। সর্বাধিক জনপ্রিয় একটি হ'ল https://github.com/cocur/slugify । প্রথমত, এটি একাধিক ভাষা সমর্থন করে এবং এটি আপডেট করা হচ্ছে।

আপনি যদি পুরো প্যাকেজটি ব্যবহার করতে না চান তবে আপনার প্রয়োজনীয় অংশটি অনুলিপি করতে পারেন।


এর ওভারকিল ... আমাদের কেবল একটি সহজ, ছোট হাতের অক্ষর, কোনও ফাঁকা স্থান / অদ্ভুত অক্ষরের ক্রিয়াকলাপ প্রয়োজন।
সেগিভ এসইও

8

এখানে অন্য একটি রয়েছে, উদাহরণস্বরূপ "অদ্ভুত অক্ষরের সাথে শিরোনাম ééé এ্যাক্স জেড" "শিরোনাম-সাথে-অদ্ভুত-অক্ষর-আই-অক্ষ" হয় becomes

/**
 * 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));


}

7

@ ইমরান ওমর বুখশ কোড (সর্বশেষ ওয়ার্ডপ্রেস (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);

অনলাইন উদাহরণ দেখুন ।


সর্বশেষে লিঙ্কগুলি: formatting.php এছাড়াও ফাংশন.
php

দ্বিতীয় উদাহরণটি আমার জন্য ব্যর্থ, প্রত্যাবর্তন%c2%abgq%c2%bb-elyas-mbarek-geh%c3%b6rt-zu-m%c3%a4nnern-des-jahres
স্লাম

6
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;
}

4
হাই ন্যাডি, এসও-তে আপনাকে স্বাগতম। কোড-কেবলমাত্র উত্তরগুলি এখানে নিরুৎসাহিত করা হয় কারণ তারা অন্যকে কীভাবে কোডিং করতে শেখায় না । আপনার কোড নমুনা কী করে এবং কীভাবে প্রশ্নের উত্তর দেয় তা বোঝাতে আপনি কি আপনার পোস্টটি সম্পাদনা করতে পারবেন? ধন্যবাদ।
টিম ম্যালোন

4

এর জন্য প্রিগ_রিপ্লেস ব্যবহার করবেন না। কেবলমাত্র কাজের জন্য একটি পিএইচপি ফাংশন নির্মিত হয়েছে: 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);
}

অনুবাদটি ঠিক আছে, সমস্যাটি হ'ল আমি আজাক্স কলের মাধ্যমে এই ফাংশনটি ব্যবহার করছি এবং এটি সেখানে কাজ করে না = (
Andres SK

@ অ্যান্ডুফো আপনাকে অবশ্যই এজ্যাক্স অনুরোধে চারসেট সেট করতে হবে।
সিলভিও দেলগাদো

4

আমি ব্যাবহার করছি:

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

কেবল ফ্যালব্যাকটি হ'ল সিরিলিক অক্ষর রূপান্তরিত হবে না এবং আমি এখন এমন সলিউশনের সন্ধান করছি যা প্রতিটি সিরিলিক চরিত্রের জন্য দীর্ঘস্থায়ী নয় _


আইকনভি অনেক সার্ভারে ইনস্টল করা নেই। কোনও অক্ষর রূপান্তর করার সমাধানটি set_locale('cyrillic.UTF-8')প্রথমে ব্যবহার করা । সঠিক মানটি আপনার ইনস্টলড লোকেলেসের উপর নির্ভর করে।
ড্যানিয়েল ডাব্লু।

3

আমি কোনটি ব্যবহার করব তা জানতাম না তাই আমি phptester.net এ একটি দ্রুত বেঞ্চ তৈরি করেছিলাম

<?php

// First test
// https://stackoverflow.com/a/42740874/10232729
function slugify(STRING $string, STRING $separator = '-'){
    
    $accents_regex = '~&([a-z]{1,2})(?:acute|cedil|circ|grave|lig|orn|ring|slash|th|tilde|uml);~i';
    $special_cases = [ '&' => '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);
    
    return preg_replace('/['.$separator.']+/u', $separator, $string);
}

// Second test
// https://stackoverflow.com/a/13331948/10232729
function slug(STRING $string, STRING $separator = '-'){
    
    $string = transliterator_transliterate('Any-Latin; NFD; [:Nonspacing Mark:] Remove; NFC; [:Punctuation:] Remove; Lower();', $string);
        
    return str_replace(' ', $separator, $string);;
}

// Third test - My choice
// https://stackoverflow.com/a/38066136/10232729
function slugbis($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);

    return strtolower($text);
}

// Fourth test
// https://stackoverflow.com/a/2955521/10232729
function slugagain($string){
    
    $table = [
        'Š'=>'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);
}

// Fifth test
// https://stackoverflow.com/a/27396804/10232729
function slugifybis($url){
    $url = trim($url);

    $url = str_replace(' ', '-', $url);
    $url = str_replace('/', '-slash-', $url);
    
    return rawurlencode($url);
}

// Sixth and last test
// https://stackoverflow.com/a/39442034/10232729
setlocale( LC_ALL, "en_US.UTF8" );  
function slugifyagain($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
    
    return urlencode($string); // safe;
};

$string = $newString = "¿ Àñdréß l'affreux ğarçon & nøël en forêt !";

$max = 10000;

echo '<pre>';
echo 'Beginning :';
echo '<br />';
echo '<br />';    
echo '> Slugging '.$max.' iterations of following :';
echo '<br />';
echo '>> ' . $string;
echo '<br />';  
echo '<br />';
echo 'Output results :';
echo '<br />';
echo '<br />';  

$start = microtime(true);

for($i = 0 ; $i < $max ; $i++){
    
    $newString = slugify($string);
}

$time = (microtime(true) - $start) * 1000;

echo '> First test passed in **' . round($time, 2) . 'ms**';
echo '<br />';  
echo '>> Result : ' . $newString;
echo '<br />';
echo '<br />';

$start = microtime(true);

for($i = 0 ; $i < $max ; $i++){
    
    $newString = slug($string);
}

$time = (microtime(true) - $start) * 1000;

echo '> Second test passed in **' . round($time, 2) . 'ms**';
echo '<br />';
echo '>> Result : ' . $newString;
echo '<br />';
echo '<br />';

$start = microtime(true);

for($i = 0 ; $i < $max ; $i++){
    
    $newString = slugbis($string);
}

$time = (microtime(true) - $start) * 1000;

echo '> Third test passed in **' . round($time, 2) . 'ms**';
echo '<br />';
echo '>> Result : ' . $newString;
echo '<br />';
echo '<br />';

$start = microtime(true);

for($i = 0 ; $i < $max ; $i++){
    
    $newString = slugagain($string);
}

$time = (microtime(true) - $start) * 1000;

echo '> Fourth test passed in **' . round($time, 2) . 'ms**';
echo '<br />';
echo '>> Result : ' . $newString;
echo '<br />';
echo '<br />';

$start = microtime(true);

for($i = 0 ; $i < $max ; $i++){
    
    $newString = slugifybis($string);
}

$time = (microtime(true) - $start) * 1000;

echo '> Fifth test passed in **' . round($time, 2) . 'ms**';
echo '<br />';
echo '>> Result : ' . $newString;
echo '<br />';
echo '<br />';

$start = microtime(true);

for($i = 0 ; $i < $max ; $i++){
    
    $newString = slugifyagain($string);
}

$time = (microtime(true) - $start) * 1000;

echo '> Sixth test passed in **' . round($time, 2) . 'ms**';
echo '<br />';
echo '>> Result : ' . $newString;
echo '</pre>';

শুরু:

নিম্নলিখিতগুলির 10000 পুনরাবৃত্তিগুলি স্লাগিং:

Éß éßড্রি লা'ফ্রোক্স আরআন & নিল!

আউটপুট ফলাফল:

প্রথম পরীক্ষাটি 120.78ms এ পাস করেছে

ফল:

দ্বিতীয় পরীক্ষা 3883.82 মিমি পাস করেছে

ফলাফল: -আন্দ্রে-ল্যাফ্রোক্স-গারকন - নেল-এন-ফরট-

তৃতীয় পরীক্ষা 56.83ms সালে পাস করেছে

ফলাফল: andress-l-affreux-garcon-noel-en-foret

চতুর্থ পরীক্ষা 18.93ms পাস

ফলাফল:! -AndreSs-l'affreux-conarcon - & - noel-en-foret-!

পঞ্চম পরীক্ষা ms.৪৫ মিলিতে পাস করেছে

ফলাফল:% C2% BF-% C3% 80% C3% B1dr% C3% A9% C3% 9F-l% 27affreux-% C4% 9Far% C3% A7on-% 26-n% C3% B8% C3% ABl- স্বীকারোক্তি-জন্য% C3 এ% AAt-% 21

ষষ্ঠ পরীক্ষা 112.42 মিমি পাস করেছে

ফলাফল: andress-laffreux-garcon-n-el-en-foret

আরও পরীক্ষা প্রয়োজন।

সম্পাদনা: কম পুনরাবৃত্তি পরীক্ষা

শুরু:

নিম্নলিখিত 100 টি পুনরাবৃত্তি স্লাগিং:

Éß éßড্রি লা'ফ্রোক্স আরআন & নিল!

আউটপুট ফলাফল:

প্রথম পরীক্ষা 1.72ms সালে পাস করেছে

ফল:

দ্বিতীয় পরীক্ষা 48.59ms সালে পাস

ফলাফল: -আন্দ্রে-ল্যাফ্রোক্স-গারকন - নেল-এন-ফরট-

তৃতীয় পরীক্ষা 0.91ms সালে পাস করেছে

ফলাফল: andress-l-affreux-garcon-noel-en-foret

চতুর্থ পরীক্ষা 0.3 মিমি পাস

ফলাফল:! -AndreSs-l'affreux-conarcon - & - noel-en-foret-!

পঞ্চম পরীক্ষাটি 0.14 মিমিতে পাস করেছে

ফলাফল:% C2% BF-% C3% 80% C3% B1dr% C3% A9% C3% 9F-l% 27affreux-% C4% 9Far% C3% A7on-% 26-n% C3% B8% C3% ABl- স্বীকারোক্তি-জন্য% C3 এ% AAt-% 21

Six ষ্ঠ পরীক্ষায় পাস হয়েছে 1..৪০ মিনিটে

ফলাফল: andress-laffreux-garcon-n-el-en-foret


আপনি এমভিপি
ববস্টারনাক


2

কোরে ইতিমধ্যে প্রয়োগ করা এমন কিছু ব্যবহারের বিষয়ে কী?

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

অথবা মূল url / url পুনর্লিখন পদ্ধতিগুলির মধ্যে একটি ..


1
ধন্যবাদ, ম্যাজেন্টো সমাধানের জন্য
pbaldauf

1

যেহেতু জিটিএলডি এবং আইডিএন আরও বেশি ব্যবহৃত হচ্ছে আমি URL দেখতে পাচ্ছি না কেন ইউআরএল এন্ড্রেস থাকতে পারে না।

পরিবর্তে আপনি চান কেবল কাঁচারেলঙ্কোড $ ইউআরএল। বেশিরভাগ ব্রাউজারগুলি ইউআরএল-এ ইউটিএফ -8 অক্ষর দেখায় (সম্ভবত কোনও প্রাচীন আইআই 6 নয়) এবং বিট.ly / goo.gl রাশিয়ান এবং আরবি জাতীয় ক্ষেত্রে এটি সংক্ষিপ্ত করতে ব্যবহার করা যেতে পারে যদি প্রয়োজন হয় বিজ্ঞাপনের উদ্দেশ্যে বা কেবল বিজ্ঞাপনে সেগুলি লিখতে পারে ব্যবহারকারীরা ব্রাউজার ইউআরএল এ তাদের লিখবে।

কেবলমাত্র পার্থক্য ফাঁকা স্থান "" আপনি যদি এগুলি অনুমতি না দিতে চান তবে তাদের "-" এবং "/" দিয়ে প্রতিস্থাপন করা ভাল ধারণা হতে পারে।

<?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/Продукты/


1

আমি মেরিলিনের প্রতিক্রিয়া অবলম্বনে এটি লিখেছি। এই ফাংশনটি পৃষ্ঠায় অক্ষর এনকোডিং নির্বিশেষে কাজ করবে। এটি একক উদ্ধৃতিগুলি ড্যাশগুলিতে পরিণত করবে না :)

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;
}

হ্যাঁ, এটি আসলে কাজ করে যা সত্যিই আমাকে বাগডাক্স / একক উদ্ধৃতি হাইফেনে পরিণত করেছিল। ধন্যবাদ.
গিবসনএফএক্স

1

আমার লোকালহোস্টে সবকিছু ঠিকঠাক ছিল তবে সার্ভারে এটি আমাকে "সেট_লোকেল" এবং "ইউটিএফ -8" "এমবি_স্ট্রোলটার" এ সহায়তা করেছিল।

<?
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;
};
?>

তার জন্য ল্যাটিন বর্ধিত ěščřžýáíéúůó
Jiri ডিভোরাক

1

আমার মনে হয় সবচেয়ে মার্জিত উপায়টি হ'ল বেহাত \ ট্রান্সলিটর \ ট্রান্সলিটর ব্যবহার করে।

আপনার ক্লাসটি দ্বারা আমার এই শ্রেণিটি প্রসারিত করা দরকার কারণ এটি একটি বিমূর্ত, কারওর মতো:

<?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


1

এখানে একটি ভাল সমাধান রয়েছে যা বিশেষ চরিত্রগুলিকেও পরিচালনা করে।

টেক্সটো ফ্যান্টাস্টিকো => টেক্সটো-ফ্যান্টাস্টিকো

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;
}

লেখক: নেটেক্সেট


1

এটিও এটি করার একটি উপায় হতে পারে। এই লিঙ্কগুলি থেকে বিশেষজ্ঞ-এক্সচেঞ্জ এবং অ্যালিনালেক্সান্ডার থেকে অনুপ্রাণিত

function slugifier($txt){

   /* Get rid of accented characters */
   $search = explode(",","ç,æ,œ,á,é,í,ó,ú,à,è,ì,ò,ù,ä,ë,ï,ö,ü,ÿ,â,ê,î,ô,û,å,e,i,ø,u");
   $replace = explode(",","c,ae,oe,a,e,i,o,u,a,e,i,o,u,a,e,i,o,u,y,a,e,i,o,u,a,e,i,o,u");
   $txt = str_replace($search, $replace, $txt);

   /* Lowercase all the characters */
   $txt = strtolower($txt);

   /* Avoid whitespace at the beginning and the ending */
   $txt = trim($txt);

   /* Replace all the characters that are not in a-z or 0-9 by a hyphen */
   $txt = preg_replace("/[^a-z0-9]/", "-", $txt);
   /* Remove hyphen anywhere it's more than one */
   $txt = preg_replace("/[\-]+/", '-', $txt);
   return $txt;   
}

0

যেহেতু আমি এখানে প্রচুর পদ্ধতি দেখেছি তবে আমি নিজের জন্য একটি সহজ পদ্ধতি খুঁজে পেয়েছি ayআমি এটি কাউকে সাহায্য করবে।

$slug = strtolower(preg_replace('/[^a-zA-Z0-9\-]/', '',preg_replace('/\s+/', '-', $string) ));

0

আমার জন্য এই রূপটি নিখুঁত, এটিতেও পরিবর্তিত &হয় and। এখানে কোড:

function dSlug($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(preg_replace('/[&]/', ' and ', $title), ENT_QUOTES, 'UTF-8')), ENT_QUOTES, 'UTF-8')), '-'));
}`
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.