在PHP中将国家字符转换为其拉丁等价物
我需要一些字符串,其中包含德语字符转换为其拉丁等价物。比如说在PHP中将国家字符转换为其拉丁等价物,php,string,Php,String,我需要一些字符串,其中包含德语字符转换为其拉丁等价物。比如说 'Höhle' => 'Hohle' 您可以使用,但应该具有等效字符数组 function transliterate($st) { $st = strtr($st, "german", "english" ); return $st; } 如果是我,我会这样做 $map = array( 'ö' => 'o', // etc, et
'Höhle' => 'Hohle'
您可以使用,但应该具有等效字符数组
function transliterate($st) {
$st = strtr($st,
"german",
"english"
);
return $st;
}
如果是我,我会这样做
$map = array( 'ö' => 'o',
// etc, etc, etc );
foreach( $map as $orig => $new )
{
$myString = str_replace( $orig, $new, $myString );
}
显然,它并没有涵盖每一个字符,但应该有助于处理一些更常见的字符:
<?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'=>'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;
}
使用Normalizer PHP扩展
对于巴西葡萄牙语,我使用以下命令
$string = 'tranformação';
$search = array('/é/', '/ç/', '/ã/', '/á/', '/ó/', '/ã/', '/ó/', '/ú/');
$replace = array('e', 'c', 'a', 'a', 'o', 'a', 'o', 'u');
$new_string = preg_replace($search, $replace, $string);
echo $new_string;
您需要提供大写和小写字符以满足您的需要 最简单的方法是
echo transliterator_transliterate('Any-Latin; Latin-ASCII', "Höhle"); // returns Hohle
您还可以使用:
好啊如果我需要在UTF-8中有效的任何其他语言中使用此工作,该怎么办?这不可能吗?你们说并没有用PHP编写的内置函数或库来处理它?好的。我如何在实践中使用它(Jak tego uzywac:P)?哦,乡下人,多好啊。;]我已经更新了我的答案,如果您还有其他问题,请询问。(Polak,jak miło.;W Zaktalizowanej wersji masz odpowiedźW twoim przypadku.)没问题,很高兴认识你我不知道为什么这个答案被接受,这根本不是正常化者所做的。友好的提醒,你可能已经对我的答案投了赞成票,而不是期望的反对票。我知道Normalizer的作用,这只是一个很好的副作用。如果您知道更好的自动答案,请编辑我的答案或与我联系-我将很高兴学习新的解决方案。如果你不知道更好的答案(除了下面的手动替换),这将对OP有效,不要为了这样做而批评“ohleSadly,它似乎不支持西里尔语脚本。对我来说,iconv
似乎对ö
和ü
产生了奇怪的结果。而且它似乎是根据语言环境工作的。我不喜欢这个。返回手动列表/替换…:\不再工作了。拉丁语有问题-ASCII@instead你为什么说它不起作用?使用答案中给出的示例使用PHP7.3。同样适用于立陶宛文字。@AurelijusRozenas的答案发布于2013年,我的评论来自2016年。当时PHP7.3甚至不存在。我的猜测是,我在PHP5.6上进行了测试,但它对我不起作用。另外请注意,答案并没有提供PHP版本。仅供参考,我没有投反对票。刚刚留言。你是救生员!我尝试了很多解决方案来克服mongodb错误,但都没有成功。非常感谢。10年后,仍然是真实的!谢谢
echo transliterator_transliterate('Any-Latin; Latin-ASCII', "Höhle"); // returns Hohle
iconv('UTF-8', 'ASCII//TRANSLIT', 'Höhle')