(PHP >= 5.4.0, PECL intl >= 2.0.0)
Transliterator::transliterate -- transliterator_transliterate — Transliterate a string
面向对象风格
$subject
[, int $start
[, int $end
]] )过程化风格
$transliterator
, string $subject
[, int $start
[, int $end
]] )Transforms a string or part thereof using an ICU transliterator.
transliterator
In the procedural version, either a Transliterator or a string from which a Transliterator can be built.
subject
The string to be transformed.
start
The start index (in UTF-16 code units) from which the string will start to be transformed, inclusive. Indexing starts at 0. The text before will be left as is.
end
The end index (in UTF-16 code units) until which the string will be transformed, exclusive. Indexing starts at 0. The text after will be left as is.
The transfomed string on success, 或者在失败时返回 FALSE
.
Example #1 Converting escaped UTF-16 code units
<?php
$s = "\u304A\u65E9\u3046\u3054\u3056\u3044\u307E\u3059";
echo transliterator_transliterate("Hex-Any/Java", $s), "\n";
//now the reverse operation with a supplementary character
$supplChar = html_entity_decode('𝄞');
echo mb_strlen($supplChar, "UTF-8"), "\n";
$encSupplChar = transliterator_transliterate("Any-Hex/Java", $supplChar);
//echoes two encoded UTF-16 code units
echo $encSupplChar, "\n";
//and back
echo transliterator_transliterate("Hex-Any/Java", $encSupplChar), "\n";
?>
以上例程的输出类似于:
お早うございます 1 \uD834\uDD1E ?
simonsimcity at gmail dot com (2013-04-15 18:11:18)
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. ?)
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! ?"));
// 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.
hdogan at gmail dot com (2012-11-11 14:33:14)
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!");
?>
jinmoku at hotmail dot com (2011-02-09 00:59:18)
OOP version :
<?php
$str = 'àá????èéê?ìí???òó???ùú?ü??
?????????????????????????';
$rule = 'NFD; [:Nonspacing Mark:] Remove; NFC';
$myTrans = Transliterator::create($rule);
echo $myTrans->transliterate($str);
//aaaaaceeeeiiiinooooouuuuyy
//AAAAACEEEEIIIINOOOOOUUUUY
?>