PHP неопределенные символы? в выводе

Моя проблема в том, что я не знаю, откуда эти символы в моем выпуске, может кто-нибудь объяснить мне, почему в моей строке эти персонажи и что нужно сделать, чтобы их отменить?

функция используется для изменения «ä», «ö», «ü» в «ae», «oe», «ue»,

<?php // str | string argument // needle | searched char // val | value // pos | default 0 at start at offset zero // pos | momently just working with default offset function changeLetter($str, $needle, $val, $pos = 0) { $mstr = ""; while (isset($str[$pos])) { if (ord($str[$pos]) == ord($needle)) { $mstr .= $val; $pos++; } else { $mstr .= $str[$pos]; $pos++; } } return $mstr; } echo changeLetter("täp@tecmax.com", 'ä', 'ae') . '<br>'; echo changeLetter("tüp@tecmax.com", 'ü', 'ue') . '<br>'; echo changeLetter("töp@tecmax.com", 'ö', 'oe') . '<br>'; //echo changeLetter("täp@tecmax.com", 'ä', 'ae', 3) . '<br>'; ?> 

Вывод:

taep@tecmax.com

tuep@tecmax.com

toep@tecmax.com

Вот что вы можете сделать:

 echo changeLetter("täp@tecmax.com", 'ä', 'ae'), PHP_EOL; echo changeLetter("tüp@tecmax.com", 'ü', 'ue'), PHP_EOL; echo changeLetter("töp@tecmax.com", 'ö', 'oe'), PHP_EOL; 

Вывод

 taep@tecmax.com tuep@tecmax.com toep@tecmax.com 

Используемая функция

 function changeLetter($str, $needle, $val, $pos = 0) { $next = function ($str, &$pos) { if (! isset($str[$pos])) return false; $char = ord($str[$pos]); if ($char < 128) { return $str[$pos ++]; } else { if ($char < 224) { $bytes = 2; } elseif ($char < 240) { $bytes = 3; } elseif ($char < 248) { $bytes = 4; } elseif ($char = 252) { $bytes = 5; } else { $bytes = 6; } $str = substr($str, $pos, $bytes); $pos += $bytes; return $str; } }; $mstr = ""; while(($chr = $next($str, $pos)) !== false) { $mstr .= $chr == $needle ? $val : $chr; } return $mstr; } 

вам нужно изменить кодировку файла или использовать &auml; , &uuml; , &ouml; вместо ä , ü , ö .