Car*_*los 16 php string replace character-encoding special-characters
我该如何更换:
用PHP?这可能吗?我已经读过某个地方,我可以用基本字符的ascii值和重音的ascii值做一些数学,但我现在找不到任何引用.
Ali*_*xel 24
如果您无法访问Normalizer类或只是不想使用它,您可以使用以下函数来替换大多数(所有?)常见的重音.
function Unaccent($string)
{
return preg_replace('~&([a-z]{1,2})(acute|cedil|circ|grave|lig|orn|ring|slash|th|tilde|uml);~i', '$1', htmlentities($string, ENT_QUOTES, 'UTF-8'));
}
Run Code Online (Sandbox Code Playgroud)
McP*_*inM 13
这个答案是不正确的.我编写它时,我不理解Unicode规范化.看看francadaval的评论和链接
查看Normalizer类来执行此操作.文档很好,所以我只是链接它而不是重复这里:
http://www.php.net/manual/en/class.normalizer.php
具体来说,该类的normalize成员:
http://www.php.net/manual/en/normalizer.normalize.php
请注意,Unicode规范化有几种形式,您似乎需要规范化表单KD(NFKD)兼容性分解,但您应该阅读文档以确保.
你不应该试图为此推出自己的功能:有太多可能出错的东西,使用提供的功能是一个更好的主意.
小智 12
对于那些没有php 5.3的人,我找到了另一个效果很好并且看起来非常全面的解决方案.以下是作者网站http://www.evaisse.net/2008/php-translit-remove-accent-unaccent-21001的链接.这是功能.
/**
* Unaccent the input string string. An example string like `ÀØ?ÿ??????`
* will be translated to `AOeyIOzoBY`. More complete than :
* strtr( (string)$str,
* "ÀÁÂÃÄÅàáâãäåÒÓÔÕÖØòóôõöøÈÉÊËèéêëÇçÌÍÎÏìíîïÙÚÛÜùúûüÿÑñ",
* "aaaaaaaaaaaaooooooooooooeeeeeeeecciiiiiiiiuuuuuuuuynn" );
*
* @param $str input string
* @param $utf8 if null, function will detect input string encoding
* @author http://www.evaisse.net/2008/php-translit-remove-accent-unaccent-21001
* @return string input string without accent
*/
function remove_accents( $str, $utf8=true )
{
$str = (string)$str;
if( is_null($utf8) ) {
if( !function_exists('mb_detect_encoding') ) {
$utf8 = (strtolower( mb_detect_encoding($str) )=='utf-8');
} else {
$length = strlen($str);
$utf8 = true;
for ($i=0; $i < $length; $i++) {
$c = ord($str[$i]);
if ($c < 0x80) $n = 0; # 0bbbbbbb
elseif (($c & 0xE0) == 0xC0) $n=1; # 110bbbbb
elseif (($c & 0xF0) == 0xE0) $n=2; # 1110bbbb
elseif (($c & 0xF8) == 0xF0) $n=3; # 11110bbb
elseif (($c & 0xFC) == 0xF8) $n=4; # 111110bb
elseif (($c & 0xFE) == 0xFC) $n=5; # 1111110b
else return false; # Does not match any model
for ($j=0; $j<$n; $j++) { # n bytes matching 10bbbbbb follow ?
if ((++$i == $length)
|| ((ord($str[$i]) & 0xC0) != 0x80)) {
$utf8 = false;
break;
}
}
}
}
}
if(!$utf8)
$str = utf8_encode($str);
$transliteration = array(
'?' => 'I', 'Ö' => 'O','Œ' => 'O','Ü' => 'U','ä' => 'a','æ' => 'a',
'?' => 'i','ö' => 'o','œ' => 'o','ü' => 'u','ß' => 's','?' => 's',
'À' => 'A','Á' => 'A','Â' => 'A','Ã' => 'A','Ä' => 'A','Å' => 'A',
'Æ' => 'A','?' => 'A','?' => 'A','?' => 'A','Ç' => 'C','?' => 'C',
'?' => 'C','?' => 'C','?' => 'C','?' => 'D','?' => 'D','È' => 'E',
'É' => 'E','Ê' => 'E','Ë' => 'E','?' => 'E','?' => 'E','?' => 'E',
'?' => 'E','?' => 'E','?' => 'G','?' => 'G','?' => 'G','?' => 'G',
'?' => 'H','?' => 'H','Ì' => 'I','Í' => 'I','Î' => 'I','Ï' => 'I',
'?' => 'I','?' => 'I','?' => 'I','?' => 'I','?' => 'I','?' => 'J',
'?' => 'K','?' => 'K','?' => 'K','?' => 'K','?' => 'K','?' => 'L',
'Ñ' => 'N','?' => 'N','?' => 'N','?' => 'N','?' => 'N','Ò' => 'O',
'Ó' => 'O','Ô' => 'O','Õ' => 'O','Ø' => 'O','?' => 'O','?' => 'O',
'?' => 'O','?' => 'R','?' => 'R','?' => 'R','?' => 'S','?' => 'S',
'?' => 'S','?' => 'S','Š' => 'S','?' => 'T','?' => 'T','?' => 'T',
'?' => 'T','Ù' => 'U','Ú' => 'U','Û' => 'U','?' => 'U','?' => 'U',
'?' => 'U','?' => 'U','?' => 'U','?' => 'U','?' => 'W','?' => 'Y',
'Ÿ' => 'Y','Ý' => 'Y','?' => 'Z','?' => 'Z','Ž' => 'Z','à' => 'a',
'á' => 'a','â' => 'a','ã' => 'a','?' => 'a','?' => 'a','?' => 'a',
'å' => 'a','ç' => 'c','?' => 'c','?' => 'c','?' => 'c','?' => 'c',
'?' => 'd','?' => 'd','è' => 'e','é' => 'e','ê' => 'e','ë' => 'e',
'?' => 'e','?' => 'e','?' => 'e','?' => 'e','?' => 'e','ƒ' => 'f',
'?' => 'g','?' => 'g','?' => 'g','?' => 'g','?' => 'h','?' => 'h',
'ì' => 'i','í' => 'i','î' => 'i','ï' => 'i','?' => 'i','?' => 'i',
'?' => 'i','?' => 'i','?' => 'i','?' => 'j','?' => 'k','?' => 'k',
'?' => 'l','?' => 'l','?' => 'l','?' => 'l','?' => 'l','ñ' => 'n',
'?' => 'n','?' => 'n','?' => 'n','?' => 'n','?' => 'n','ò' => 'o',
'ó' => 'o','ô' => 'o','õ' => 'o','ø' => 'o','?' => 'o','?' => 'o',
'?' => 'o','?' => 'r','?' => 'r','?' => 'r','?' => 's','š' => 's',
'?' => 't','ù' => 'u','ú' => 'u','û' => 'u','?' => 'u','?' => 'u',
'?' => 'u','?' => 'u','?' => 'u','?' => 'u','?' => 'w','ÿ' => 'y',
'ý' => 'y','?' => 'y','?' => 'z','?' => 'z','ž' => 'z','?' => 'A',
'?' => 'A','?' => 'A','?' => 'A','?' => 'A','?' => 'A','?' => 'A',
'?' => 'A','?' => 'A','?' => 'A','?' => 'A','?' => 'A','?' => 'A',
'?' => 'A','?' => 'A','?' => 'A','?' => 'A','?' => 'A','?' => 'A',
'?' => 'A','?' => 'A','?' => 'A','?' => 'B','?' => 'G','?' => 'D',
'?' => 'E','?' => 'E','?' => 'E','?' => 'E','?' => 'E','?' => 'E',
'?' => 'E','?' => 'E','?' => 'E','?' => 'Z','?' => 'I','?' => 'I',
'?' => 'I','?' => 'I','?' => 'I','?' => 'I','?' => 'I','?' => 'I',
'?' => 'I','?' => 'I','?' => 'I','?' => 'I','?' => 'I','?' => 'I',
'?' => 'I','?' => 'I','?' => 'I','?' => 'I','?' => 'I','?' => 'I',
'?' => 'T','?' => 'I','?' => 'I','?' => 'I','?' => 'I','?' => 'I',
'?' => 'I','?' => 'I','?' => 'I','?' => 'I','?' => 'I','?' => 'I',
'?' => 'I','?' => 'I','?' => 'I','?' => 'K','?' => 'L','?' => 'M',
'?' => 'N','?' => 'K','?' => 'O','?' => 'O','?' => 'O','?' => 'O',
'?' => 'O','?' => 'O','?' => 'O','?' => 'O','?' => 'O','?' => 'P',
'?' => 'R','?' => 'R','?' => 'S','?' => 'T','?' => 'Y','?' => 'Y',
'?' => 'Y','?' => 'Y','?' => 'Y','?' => 'Y','?' => 'Y','?' => 'Y',
'?' => 'Y','?' => 'Y','?' => 'F','?' => 'X','?' => 'P','?' => 'O',
'?' => 'O','?' => 'O','?' => 'O','?' => 'O','?' => 'O','?' => 'O',
'?' => 'O','?' => 'O','?' => 'O','?' => 'O','?' => 'O','?' => 'O',
'?' => 'O','?' => 'O','?' => 'O','?' => 'O','?' => 'O','?' => 'O',
'?' => 'O','?' => 'a','?' => 'a','?' => 'a','?' => 'a','?' => 'a',
'?' => 'a','?' => 'a','?' => 'a','?' => 'a','?' => 'a','?' => 'a',
'?' => 'a','?' => 'a','?' => 'a','?' => 'a','?' => 'a','?' => 'a',
'?' => 'a','?' => 'a','?' => 'a','?' => 'a','?' => 'a','?' => 'a',
'?' => 'a','?' => 'a','?' => 'a','?' => 'b','?' => 'g','?' => 'd',
'?' => 'e','?' => 'e','?' => 'e','?' => 'e','?' => 'e','?' => 'e',
'?' => 'e','?' => 'e','?' => 'e','?' => 'z','?' => 'i','?' => 'i',
'?' => 'i','?' => 'i','?' => 'i','?' => 'i','?' => 'i','?' => 'i',
'?' => 'i','?' => 'i','?' => 'i','?' => 'i','?' => 'i','?' => 'i',
'?' => 'i','?' => 'i','?' => 'i','?' => 'i','?' => 'i','?' => 'i',
'?' => 'i','?' => 'i','?' => 'i','?' => 'i','?' => 't','?' => 'i',
'?' => 'i','?' => 'i','?' => 'i','?' => 'i','?' => 'i','?' => 'i',
'?' => 'i','?' => 'i','?' => 'i','?' => 'i','?' => 'i','?' => 'i',
'?' => 'i','?' => 'i','?' => 'i','?' => 'i','?' => 'i','?' => 'k',
'?' => 'l','?' => 'm','?' => 'n','?' => 'k','?' => 'o','?' => 'o',
'?' => 'o','?' => 'o','?' => 'o','?' => 'o','?' => 'o','?' => 'o',
'?' => 'o','?' => 'p','?' => 'r','?' => 'r','?' => 'r','?' => 's',
'?' => 's','?' => 't','?' => 'y','?' => 'y','?' => 'y','?' => 'y',
'?' => 'y','?' => 'y','?' => 'y','?' => 'y','?' => 'y','?' => 'y',
'?' => 'y','?' => 'y','?' => 'y','?' => 'y','?' => 'y','?' => 'y',
'?' => 'y','?' => 'y','?' => 'f','?' => 'x','?' => 'p','?' => 'o',
'?' => 'o','?' => 'o','?' => 'o','?' => 'o','?' => 'o','?' => 'o',
'?' => 'o','?' => 'o','?' => 'o','?' => 'o','?' => 'o','?' => 'o',
'?' => 'o','?' => 'o','?' => 'o','?' => 'o','?' => 'o','?' => 'o',
'?' => 'o','?' => 'o','?' => 'o','?' => 'o','?' => 'o','?' => 'A',
'?' => 'B','?' => 'V','?' => 'G','?' => 'D','?' => 'E','?' => 'E',
'?' => 'Z','?' => 'Z','?' => 'I','?' => 'I','?' => 'K','?' => 'L',
'?' => 'M','?' => 'N','?' => 'O','?' => 'P','?' => 'R','?' => 'S',
'?' => 'T','?' => 'U','?' => 'F','?' => 'K','?' => 'T','?' => 'C',
'?' => 'S','?' => 'S','?' => 'Y','?' => 'E','?' => 'Y','?' => 'Y',
'?' => 'A','?' => 'B','?' => 'V','?' => 'G','?' => 'D','?' => 'E',
'?' => 'E','?' => 'Z','?' => 'Z','?' => 'I','?' => 'I','?' => 'K',
'?' => 'L','?' => 'M','?' => 'N','?' => 'O','?' => 'P','?' => 'R',
'?' => 'S','?' => 'T','?' => 'U','?' => 'F','?' => 'K','?' => 'T',
'?' => 'C','?' => 'S','?' => 'S','?' => 'Y','?' => 'E','?' => 'Y',
'?' => 'Y','ð' => 'd','Ð' => 'D','þ' => 't','Þ' => 'T','?' => 'a',
'?' => 'b','?' => 'g','?' => 'd','?' => 'e','?' => 'v','?' => 'z',
'?' => 't','?' => 'i','?' => 'k','?' => 'l','?' => 'm','?' => 'n',
'?' => 'o','?' => 'p','?' => 'z','?' => 'r','?' => 's','?' => 't',
'?' => 'u','?' => 'p','?' => 'k','?' => 'g','?' => 'q','?' => 's',
'?' => 'c','?' => 't','?' => 'd','?' => 't','?' => 'c','?' => 'k',
'?' => 'j','?' => 'h'
);
$str = str_replace( array_keys( $transliteration ),
array_values( $transliteration ),
$str);
return $str;
}
//- remove_accents()
Run Code Online (Sandbox Code Playgroud)
使用自定义字符的短str_replace:
<?php
$original_string = "¿Dónde está el niño que vive aquí? En el témpano o en el iglú. ÁFRICA, MÉXICO, ÍNDICE, CANCIÓN y NÚMERO.";
$some_special_chars = array("á", "é", "í", "ó", "ú", "Á", "É", "Í", "Ó", "Ú", "ñ", "Ñ");
$replacement_chars = array("a", "e", "i", "o", "u", "A", "E", "I", "O", "U", "n", "N");
$replaced_string = str_replace($some_special_chars, $replacement_chars, $original_string);
echo $replaced_string; // outputs '¿Donde esta el nino que vive aqui? En el tempano o en el iglu. AFRICA, MEXICO, INDICE, CANCION y NUMERO.'
?>
Run Code Online (Sandbox Code Playgroud)