Skip to content

Instantly share code, notes, and snippets.

@james2doyle
Last active January 12, 2022 13:19
Show Gist options
  • Save james2doyle/9158349 to your computer and use it in GitHub Desktop.
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

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

@ausi
Copy link

ausi commented Oct 30, 2017

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

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

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

Finally I found someone with the exact same question

@jenstornell
Copy link

MIT license?

@james2doyle
Copy link
Author

james2doyle commented Jun 22, 2019 via email

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