无法替换字符串上的重音符号(UTF8问题)

时间:2019-01-07 21:44:10

标签: php string

如果我回显我的字符串     <?php echo $string; ?> 它返回     Vítor

但是我想用'i'代替'í'以创建一个干净的用户名。 我尝试使用以下功能

$unwanted_array = array(    'Š'=>'S', 'š'=>'s', 'Ž'=>'Z', 'ž'=>'z', 'À'=>'A', 'Á'=>'A', 'Â'=>'A', 'Ã'=>'A', 'Ä'=>'A', 'Å'=>'A', 'Æ'=>'A', 'Ç'=>'C', 'È'=>'E', 'É'=>'E',
                        'Ê'=>'E', 'Ë'=>'E', 'Ì'=>'I', 'Í'=>'I', 'Î'=>'I', 'Ï'=>'I', 'Ñ'=>'N', 'Ò'=>'O', 'Ó'=>'O', 'Ô'=>'O', 'Õ'=>'O', 'Ö'=>'O', 'Ø'=>'O', 'Ù'=>'U',
                        'Ú'=>'U', 'Û'=>'U', 'Ü'=>'U', 'Ý'=>'Y', 'Þ'=>'B', 'ß'=>'Ss', 'à'=>'a', 'á'=>'a', 'â'=>'a', 'ã'=>'a', 'ä'=>'a', 'å'=>'a', 'æ'=>'a', 'ç'=>'c',
                        'è'=>'e', 'é'=>'e', 'ê'=>'e', 'ë'=>'e', 'ì'=>'i', 'í'=>'i', 'î'=>'i', 'ï'=>'i', 'ð'=>'o', 'ñ'=>'n', 'ò'=>'o', 'ó'=>'o', 'ô'=>'o', 'õ'=>'o',
                        'ö'=>'o', 'ø'=>'o', 'ù'=>'u', 'ú'=>'u', 'û'=>'u', 'ý'=>'y', 'þ'=>'b', 'ÿ'=>'y' );` 
$novouser_uu = strtr($novouser_u, $unwanted_array);

但是它返回     v�tor 如果我使用utf8_encode,它将返回vãtor,而utf8_decode将返回v?tor

用iconv替换只是删除了字符或留下了问号'?'

此页面的代码上没有html,因为它是通过AJAX访问的,但是在它来自的页面中,我将标头字符集设置为UTF-8。 另外,在config.php文件中,      mysqli_set_charset($ligacao, "utf8");

编辑:

在进行替换之前,以及在删除$novouser_u = strtolower($novouser);之后,我都拥有strtolower

2 个答案:

答案 0 :(得分:0)

您可以尝试将字节码用于要替换的内容。

<?php
$unwanted_array = array(
    "\xc3\xad" => "i",
    "\xc5\xa0" => "S",
);
$novouser_u = "Vítor";
$novouser_uu = strtr($novouser_u, $unwanted_array);
echo "$novouser_uu\n";

$novouser_u = "Šup";
$novouser_uu = strtr($novouser_u, $unwanted_array);
echo "$novouser_uu\n";

答案 1 :(得分:0)

您可以改用实际的transliterator

$in = <<<'_E_'
'Š'=>'S', 'š'=>'s', 'Ž'=>'Z', 'ž'=>'z', 'À'=>'A', 'Á'=>'A', 'Â'=>'A', 'Ã'=>'A', 'Ä'=>'A', 'Å'=>'A', 'Æ'=>'A', 'Ç'=>'C', 'È'=>'E', 'É'=>'E',
'Ê'=>'E', 'Ë'=>'E', 'Ì'=>'I', 'Í'=>'I', 'Î'=>'I', 'Ï'=>'I', 'Ñ'=>'N', 'Ò'=>'O', 'Ó'=>'O', 'Ô'=>'O', 'Õ'=>'O', 'Ö'=>'O', 'Ø'=>'O', 'Ù'=>'U',
'Ú'=>'U', 'Û'=>'U', 'Ü'=>'U', 'Ý'=>'Y', 'Þ'=>'B', 'ß'=>'Ss', 'à'=>'a', 'á'=>'a', 'â'=>'a', 'ã'=>'a', 'ä'=>'a', 'å'=>'a', 'æ'=>'a', 'ç'=>'c',
'è'=>'e', 'é'=>'e', 'ê'=>'e', 'ë'=>'e', 'ì'=>'i', 'í'=>'i', 'î'=>'i', 'ï'=>'i', 'ð'=>'o', 'ñ'=>'n', 'ò'=>'o', 'ó'=>'o', 'ô'=>'o', 'õ'=>'o',
'ö'=>'o', 'ø'=>'o', 'ù'=>'u', 'ú'=>'u', 'û'=>'u', 'ý'=>'y', 'þ'=>'b', 'ÿ'=>'y' );
_E_;

$tl = Transliterator::create('Latin-ASCII;');
echo $tl->transliterate($in);

输出:

'S'=>'S', 's'=>'s', 'Z'=>'Z', 'z'=>'z', 'A'=>'A', 'A'=>'A', 'A'=>'A', 'A'=>'A', 'A'=>'A', 'A'=>'A', 'AE'=>'A', 'C'=>'C', 'E'=>'E', 'E'=>'E',
'E'=>'E', 'E'=>'E', 'I'=>'I', 'I'=>'I', 'I'=>'I', 'I'=>'I', 'N'=>'N', 'O'=>'O', 'O'=>'O', 'O'=>'O', 'O'=>'O', 'O'=>'O', 'O'=>'O', 'U'=>'U',
'U'=>'U', 'U'=>'U', 'U'=>'U', 'Y'=>'Y', 'TH'=>'B', 'ss'=>'Ss', 'a'=>'a', 'a'=>'a', 'a'=>'a', 'a'=>'a', 'a'=>'a', 'a'=>'a', 'ae'=>'a', 'c'=>'c',
'e'=>'e', 'e'=>'e', 'e'=>'e', 'e'=>'e', 'i'=>'i', 'i'=>'i', 'i'=>'i', 'i'=>'i', 'd'=>'o', 'n'=>'n', 'o'=>'o', 'o'=>'o', 'o'=>'o', 'o'=>'o',
'o'=>'o', 'o'=>'o', 'u'=>'u', 'u'=>'u', 'u'=>'u', 'y'=>'y', 'th'=>'b', 'y'=>'y' );

有关音译规则的完整文档,请参见icu-project.org