Skip to content

Instantly share code, notes, and snippets.

@james2doyle
Last active January 12, 2022 13:19
Show Gist options
  • Select an option

  • Save james2doyle/9158349 to your computer and use it in GitHub Desktop.

Select an option

Save james2doyle/9158349 to your computer and use it in GitHub Desktop.
Simple slugify function for PHP. Creates a slug for the passed string, taking into account international characters as well.
<?php
function slugify($string, $replace = array(), $delimiter = '-') {
// https://github.com/phalcon/incubator/blob/master/Library/Phalcon/Utils/Slug.php
if (!extension_loaded('iconv')) {
throw new Exception('iconv module not loaded');
}
// Save the old locale and set the new locale to UTF-8
$oldLocale = setlocale(LC_ALL, '0');
setlocale(LC_ALL, 'en_US.UTF-8');
$clean = iconv('UTF-8', 'ASCII//TRANSLIT', $string);
if (!empty($replace)) {
$clean = str_replace((array) $replace, ' ', $clean);
}
$clean = preg_replace("/[^a-zA-Z0-9\/_|+ -]/", '', $clean);
$clean = strtolower($clean);
$clean = preg_replace("/[\/_|+ -]+/", $delimiter, $clean);
$clean = trim($clean, $delimiter);
// Revert back to the old locale
setlocale(LC_ALL, $oldLocale);
return $clean;
}
@rachitpatel83

Copy link
Copy Markdown

જુઓ, અત્યાર સુધી કેવી જામી નોરતાની રમઝટ

@ausi

ausi commented Oct 30, 2017

Copy link
Copy Markdown

I created ausi/slug-generator that can handle more advanced characters too, e.g.:

$generator = new Ausi\SlugGenerator\SlugGenerator;
$generator->generate('જુઓ, અત્યાર સુધી કેવી જામી નોરતાની રમઝટ', ['locale' => 'gu']);
// output: ja-o-atayara-sadhi-kavi-jami-noratani-ramajhata

@controlnocontrol

Copy link
Copy Markdown

The following error is being thrown when there are apostrophes (’) in the string.

iconv(): Detected an illegal character in input string

Is there a solution to this?

@jrtderonde

Copy link
Copy Markdown

જુઓ, અત્યાર સુધી કેવી જામી નોરતાની રમઝટ

Finally I found someone with the exact same question

@jenstornell

Copy link
Copy Markdown

MIT license?

@james2doyle

james2doyle commented Jun 22, 2019 via email

Copy link
Copy Markdown
Author

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment