我需要一些包含德语字符的字符串转换为拉丁语.例如
'Höhle' => 'Hohle'
Run Code Online (Sandbox Code Playgroud)
最简单的方法是
echo transliterator_transliterate('Any-Latin; Latin-ASCII', "Höhle"); // returns Hohle
Run Code Online (Sandbox Code Playgroud)
它显然不包括每一个角色,但应该帮助一些更常见的角色:
<?php
/**
* Replaces special characters in a string with their "non-special" counterpart.
*
* Useful for friendly URLs.
*
* @access public
* @param string
* @return string
*/
function convertAccentsAndSpecialToNormal($string) {
$table = array(
'À'=>'A', 'Á'=>'A', 'Â'=>'A', 'Ã'=>'A', 'Ä'=>'A', 'Å'=>'A', '?'=>'A', '?'=>'A', '?'=>'A', 'Æ'=>'A', '?'=>'A',
'à'=>'a', 'á'=>'a', 'â'=>'a', 'ã'=>'a', 'ä'=>'a', 'å'=>'a', '?'=>'a', '?'=>'a', '?'=>'a', 'æ'=>'a', '?'=>'a',
'Þ'=>'B', 'þ'=>'b', 'ß'=>'Ss',
'Ç'=>'C', '?'=>'C', '?'=>'C', '?'=>'C', '?'=>'C',
'ç'=>'c', '?'=>'c', '?'=>'c', '?'=>'c', '?'=>'c',
'?'=>'Dj', '?'=>'D',
'?'=>'dj', '?'=>'d',
'È'=>'E', 'É'=>'E', 'Ê'=>'E', 'Ë'=>'E', '?'=>'E', '?'=>'E', '?'=>'E', '?'=>'E',
'è'=>'e', 'é'=>'e', 'ê'=>'e', 'ë'=>'e', '?'=>'e', '?'=>'e', '?'=>'e', '?'=>'e',
'?'=>'G', '?'=>'G', '?'=>'G', '?'=>'G',
'?'=>'g', '?'=>'g', '?'=>'g', '?'=>'g',
'?'=>'H', '?'=>'H',
'?'=>'h', '?'=>'h',
'Ì'=>'I', 'Í'=>'I', 'Î'=>'I', 'Ï'=>'I', '?'=>'I', '?'=>'I', '?'=>'I', '?'=>'I', '?'=>'I',
'ì'=>'i', 'í'=>'i', 'î'=>'i', 'ï'=>'i', '?'=>'i', '?'=>'i', '?'=>'i', '?'=>'i', '?'=>'i',
'?'=>'J',
'?'=>'j',
'?'=>'K',
'?'=>'k', '?'=>'k',
'?'=>'L', '?'=>'L', '?'=>'L', '?'=>'L', '?'=>'L',
'?'=>'l', '?'=>'l', '?'=>'l', '?'=>'l', '?'=>'l',
'Ñ'=>'N', '?'=>'N', '?'=>'N', '?'=>'N', '?'=>'N',
'ñ'=>'n', '?'=>'n', '?'=>'n', '?'=>'n', '?'=>'n', '?'=>'n',
'Ò'=>'O', 'Ó'=>'O', 'Ô'=>'O', 'Õ'=>'O', 'Ö'=>'O', 'Ø'=>'O', '?'=>'O', '?'=>'O', '?'=>'O', 'Œ'=>'O',
'ò'=>'o', 'ó'=>'o', 'ô'=>'o', 'õ'=>'o', 'ö'=>'o', 'ø'=>'o', '?'=>'o', '?'=>'o', '?'=>'o', 'œ'=>'o', 'ð'=>'o',
'?'=>'R', '?'=>'R',
'?'=>'r', '?'=>'r', '?'=>'r',
'Š'=>'S', '?'=>'S', '?'=>'S', '?'=>'S',
'š'=>'s', '?'=>'s', '?'=>'s', '?'=>'s',
'?'=>'T', '?'=>'T', '?'=>'T',
'?'=>'t', '?'=>'t', '?'=>'t',
'Ù'=>'U', 'Ú'=>'U', 'Û'=>'U', 'Ü'=>'U', '?'=>'U', '?'=>'U', '?'=>'U', '?'=>'U', '?'=>'U', '?'=>'U',
'ù'=>'u', 'ú'=>'u', 'û'=>'u', 'ü'=>'u', '?'=>'u', '?'=>'u', '?'=>'u', '?'=>'u', '?'=>'u', '?'=>'u',
'?'=>'W', '?'=>'W', '?'=>'W', '?'=>'W',
'?'=>'w', '?'=>'w', '?'=>'w', '?'=>'w',
'Ý'=>'Y', 'Ÿ'=>'Y', '?'=>'Y',
'ý'=>'y', 'ÿ'=>'y', '?'=>'y',
'Ž'=>'Z', '?'=>'Z', '?'=>'Z',
'ž'=>'z', '?'=>'z', '?'=>'z',
'“'=>'"', '”'=>'"', '‘'=>"'", '’'=>"'", '•'=>'-', '…'=>'...', '—'=>'-', '–'=>'-', '¿'=>'?', '¡'=>'!', '°'=>' degrees ',
'¼'=>' 1/4 ', '½'=>' 1/2 ', '¾'=>' 3/4 ', '?'=>' 1/3 ', '?'=>' 2/3 ', '?'=>' 1/8 ', '?'=>' 3/8 ', '?'=>' 5/8 ', '?'=>' 7/8 ',
'÷'=>' divided by ', '×'=>' times ', '±'=>' plus-minus ', '?'=>' square root ', '?'=>' infinity ',
'?'=>' almost equal to ', '?'=>' not equal to ', '?'=>' identical to ', '?'=>' less than or equal to ', '?'=>' greater than or equal to ',
'?'=>' left ', '?'=>' right ', '?'=>' up ', '?'=>' down ', '?'=>' left and right ', '?'=>' up and down ',
'?'=>' care of ', '?' => ' estimated ',
'?'=>' ohm ',
'?'=>' female ', '?'=>' male ',
'©'=>' Copyright ', '®'=>' Registered ', '™' =>' Trademark ',
);
$string = strtr($string, $table);
// Currency symbols: £¤¥€ - we dont bother with them for now
$string = preg_replace("/[^\x9\xA\xD\x20-\x7F]/u", "", $string);
return $string;
}
Run Code Online (Sandbox Code Playgroud)
使用 Normalizer PHP 扩展。
\n\nhttp://www.php.net/manual/en/class.normalizer.php
\n\n<?php\n$string = \'H\xc3\xb6hle\';\necho Normalizer::normalize($string);\n?>\nRun Code Online (Sandbox Code Playgroud)\n