You can create slugs easily with:
<?php
function slugify($string) {
$string = transliterator_transliterate("Any-Latin; NFD; [:Nonspacing Mark:] Remove; NFC; [:Punctuation:] Remove; Lower();", $string);
$string = preg_replace('/[-\s]+/', '-', $string);
return trim($string, '-');
}
echo slugify("Я люблю PHP!");
?>
Transliterator::transliterate
transliterator_transliterate
(No version information available, might only be in SVN)
Transliterator::transliterate -- transliterator_transliterate — Transliterate a string
Description
Oriented object style
public void Transliterator::transliterate
( string $subject
[, string $start
[, string $end
]] )
Procedural style
transliterator_transliterate
( string $subject
[, string $start
[, string $end
]] )
Transliterates a string.
Warning
This function is currently not documented; only its argument list is available.
Parameters
- subject
-
The string to be transliterated.
- start
-
- end
-
Return Values
The transliterated string on success, or FALSE on failure.
See Also
- Transliterator::getErrorMessage() - Get last error message
- Transliterator::__construct() - Construct a Transliterator object
hdogan at gmail dot com ¶
7 months ago
simonsimcity at gmail dot com ¶
2 months ago
I pretty much like the idea of hdogan, but there's at least one group of characters he's missing: ligature characters.
They're at least used in Norwegian and I read something about French, too ... Some are just used for styling (f.e. fi)
Here's an example that supports all characters (should at least, according to the documentation):
<?php
var_dump(transliterator_transliterate('Any-Latin; Latin-ASCII; Lower()', "A æ Übérmensch på høyeste nivå! И я люблю PHP! fi"));
// string(41) "a ae ubermensch pa hoyeste niva! i a lublu php! fi"
?>
In this example any character will firstly be converted to a latin character. If that's finished, replace all latin characters by their ASCII replacement.
jinmoku at hotmail dot com ¶
2 years ago
OOP version :
<?php
$str = 'àáâãäçèéêëìíîïñòóôõöùúûüýÿ
ÀÁÂÃÄÇÈÉÊËÌÍÎÏÑÒÓÔÕÖÙÚÛÜÝ';
$rule = 'NFD; [:Nonspacing Mark:] Remove; NFC';
$myTrans = Transliterator::create($rule);
echo $myTrans->transliterate($str);
//aaaaaceeeeiiiinooooouuuuyy
//AAAAACEEEEIIIINOOOOOUUUUY
?>
