If you need convert string from Windows-1251 to 866. Some characters of 1251 haven't representation on DOS 866. For example, long dash -- chr(150) will be converted to 0, after that iconv finish his work and other charactes will be skiped. Problem characters range in win1251 (128-159,163,165-167,169,171-174,177-182,187-190).Use this://$text - input text in windows-1251//$cout - output text in 866 (cp866, dos ru ascii)for($i=0;$i<strlen($text);$i++) { $ord=ord($text[$i]); if($ord>=192&&$ord<=239) $cout.=chr($ord-64); elseif($ord>=240&&$ord<=255) $cout.=chr($ord-16); elseif($ord==168) $cout.=chr(240); elseif($ord==184) $cout.=chr(241); elseif($ord==185) $cout.=chr(252); elseif($ord==150||$ord==151) $cout.=chr(45); elseif($ord==147||$ord==148||$ord==171||$ord==187) $cout.=chr(34); elseif($ord>=128&&$ord<=190) $i=$i; //нет представления данному символу else $cout.=chr($ord);}