如果您需要將字串從 Windows-1251 轉換為 866。某些 1251 的字元在 DOS 866 中沒有表示法。例如,長破折號 -- chr(150) 將被轉換為 0,之後 iconv 完成其工作,其他字元將被跳過。問題字元範圍在 win1251 中 (128-159,163,165-167,169,171-174,177-182,187-190)。
使用這個
//$text - 輸入的 Windows-1251 文字
//$cout - 輸出的 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);
}