conversion Fukntsii UTF8-Win, Win-UTF8

Parfois, il y a des moments où vous avez besoin de recoder les données php d'un encodage à un autre.

Cet article décrit quelques caractéristiques que je ne parle pas seulement utilisés.

Les fonctions et les scripts ne sont pas écrites par moi, mais en travaillant avec succès et aident souvent avec des interactions php-javascript.

Ainsi, la conversion de utf-8 aux fenêtres-1251 et à l'arrière:

La première fonction de utf8 dans cp1251

 fonction utf8_win1 ($ s) {
 $ S = strtr ($ s, array ( "\ xD0 \ XB0" => "et", "\ xD0 \ x90" => "A", "\ xD0 \ xB1" => "b", "\ xD0 \ x91 "=>" B "
  "\ XD0 \ xB2" => "in", "\ xD0 \ x92" => "La", "\ xD0 \ xB3" => "g", "\ xD0 \ x93" => "G", "\ xD0 \ xB4 "=>" q "
  "\ XD0 \ x94" => "D", "\ xD0 \ XB5" => "e", "\ xD0 \ x95" => "E", "\ Xd1 \ x91" => "e", "\ xD0 \ x81 "=>" E "
  "\ XD0 \ xB6" => "w", "\ xD0 \ x96" => "F", "\ xD0 \ xB7" => "s", "\ xD0 \ x97" => "Z", "\ xD0 \ XB8 "=>" et "
  "\ XD0 \ x98" => "ET", "\ xD0 \ XB9" => "second", "\ xD0 \ x99" => "J", "\ xD0 \ XBA" => "à", "\ xD0 \ X9A "=>" K "
  "\ XD0 \ XBB" => "L", "\ xD0 \ X9b" => "A", "\ xD0 \ XBC" => "m", "\ xD0 \ x9C" => "M", "\ xD0 \ XBD "=>" n "
  "\ XD0 \ x9d" => "H", "\ xD0 \ XBE" => "environ", "\ xD0 \ X9E" => "A propos", "\ xD0 \ XBF" => "n" "\ xD0 \ x9F "=>" P "
  "\ XD1 \ x80" => "P", "\ xD0 \ xa0" => "P", "\ Xd1 \ x81" => "avec", "\ xD0 \ XA1" => "C", "\ Xd1 \ x82 "=>" m "
  "\ XD0 \ xA2" => "T", "\ Xd1 \ x83" => "Y", "\ xD0 \ XA3" => "Y", "\ Xd1 \ x84" => "f", "\ xD0 \ XA4 "=>" F "
  "\ XD1 \ x85" => "x", "\ xD0 \ xA5" => "X", "\ Xd1 \ x86" => "n", "\ xD0 \ XA6" => "C", "\ Xd1 \ x87 "=>" h "
  "\ XD0 \ xA7" => "B", "\ Xd1 \ x88" => "w", "\ xD0 \ xA8" => "W", "\ Xd1 \ x89" => "u", "\ xD0 \ xA9 "=>" Y ",
  "\ XD1 \ X8A" => "b", "\ xD0 \ Xaa" => "b", "\ Xd1 \ X8B" => "s", "\ xD0 \ xab" => "Y", "\ Xd1 \ X8c "=>" s "
  "\ XD0 \ XAC" => "L", "\ Xd1 \ X8d" => "e", "\ xD0 \ xAD" => "E", "\ Xd1 \ X8E" => "w", "\ xD0 \ XAE "=>" U "
  "\ XD1 \ X8F" => "I", "\ xD0 \ XAF" => "I"));
 return $ s;
 }

La fonction de la seconde en 1251 utf8

 fonction utf8_win ($ s) {$ out = "";  C1 $ = "";  $ Byte2 = false;  for ($ c = 0; $ c <strlen ($ s); $ c ++) {$ i = ord ($ s [$ c]);  . Si ($ i <= 127) $ sur [$ le c] de = $;  if (Byte2 $) {new_c2 $ = ($ c1 & 3) * 64 + ($ i & 63);  $ New_c1 = ($ c1 >> 2) et 5;  $ New_i = $ new_c1 * 256 + new_c2 $;  if (new_i $ == 1025) {out_i $ = 168;  } Else {if (new_i $ == 1105) {out_i $ = 184;  } Else {$ out_i = $ new_i-848;  }} $ Out = chr (out_i $) .;  $ Byte2 = false;  } Si (($ i >> 5) == 6) {$ c1 = $ i;  $ Byte2 = true;  }} Return $ out;  } 

La fonction de la première fenêtres-1251 en UTF-8

  fonction win_utf8 ($ in_text) { 
  $ Sortie = "";
  $ Autres [1025] = "E";
  $ Autres [1105] = "e";
  $ Autres [1028] = "E";
  $ Autres [1108] = "E";
  $ Autres [1030] = "I";
  $ Autres [1110] = "i";
  $ Autres [1031] = "Ji";
  $ Autres [1111] = "Ji";
  for ($ i = 0; $ i <strlen ($ in_text); $ i ++) {
  if (ord ($ in_text {$ i})> 191) {
  .. $ Sortie = "& #" (ord ($ in_text {$ i}) + 848). ";";
  } Else {
  if (array_search ($ in_text {i} $, $ autre) === false) {
  . $ Output = $ in_text {$ i};
  } Else {
  $ Sortie = "& #" array_search ($ in_text {$ i}, $ autres) ... ";";
  }
  }
  }
  return $ sortie;
 }

fonction de transcodage des fenêtres-1251 à utf-8

Auparavant utilisé iconv ( "1251?," UTF-8?, $ Text_for_convert), mais comme vous le savez iconv donne une grosse charge sur le serveur et est plus lente que la fonction fournie ci - dessous.

Abandon forcé iconv même alors, à un certain moment lors du transcodage des fenêtres-1251 en UTF-8 pour aucune raison apparente, cette fonction a été le retour d'une chaîne vide.

!!! Si le in_arr swap $ et out_arr $, la fonction ne fonctionnera «à l'envers», à savoir convertira UTF-8 CP-1251.

 fonction cp1251_to_utf8 ($ txt) {
  $ In_arr = array (
  chr (208), chr (192), chr (193), chr (194)
  chr (195), chr (196), chr (197), chr (168)
  chr (198), chr (199), chr (200), chr (201)
  chr (202), chr (203), chr (204), chr (205)
  chr (206), chr (207), chr (209), chr (210)
  chr (211), chr (212), chr (213), chr (214)
  chr (215), chr (216), chr (217), chr (218)
  chr (219), chr (220), chr (221), chr (222)
  chr (223), chr (224), chr (225), chr (226)
  chr (227), chr (228), chr (229), chr (184)
  chr (230), chr (231), chr (232), chr (233)
  chr (234), chr (235), chr (236), chr (237)
  chr (238), chr (239), chr (240), chr (241)
  chr (242), chr (243), chr (244), chr (245)
  chr (246), chr (247), chr (248), chr (249)
  chr (250), chr (251), chr (252), chr (253)
  chr (254), chr (255)
  ); 
 
  $ Out_arr = array (
  chr (208) .chr (160), chr (208) .chr (144), chr (208) .chr (145)
  chr (208) .chr (146), chr (208) .chr (147), chr (208) .chr (148)
  chr (208) .chr (149), chr (208) .chr (129), chr (208) .chr (150)
  chr (208) .chr (151), chr (208) .chr (152), chr (208) .chr (153)
  chr (208) .chr (154), chr (208) .chr (155), chr (208) .chr (156)
  chr (208) .chr (157), chr (208) .chr (158), chr (208) .chr (159)
  chr (208) .chr (161), chr (208) .chr (162), chr (208) .chr (163)
  chr (208) .chr (164), chr (208) .chr (165), chr (208) .chr (166)
  chr (208) .chr (167), chr (208) .chr (168), chr (208) .chr (169)
  chr (208) .chr (170), chr (208) .chr (171), chr (208) .chr (172)
  chr (208) .chr (173), chr (208) .chr (174), chr (208) .chr (175)
  chr (208) .chr (176), chr (208) .chr (177), chr (208) .chr (178)
  chr (208) .chr (179), chr (208) .chr (180), chr (208) .chr (181)
  chr (209) .chr (145), chr (208) .chr (182), chr (208) .chr (183)
  chr (208) .chr (184), chr (208) .chr (185), chr (208) .chr (186)
  chr (208) .chr (187), chr (208) .chr (188), chr (208) .chr (189)
  chr (208) .chr (190), chr (208) .chr (191), chr (209) .chr (128)
  chr (209) .chr (129), chr (209) .chr (130), chr (209) .chr (131)
  chr (209) .chr (132), chr (209) .chr (133), chr (209) .chr (134)
  chr (209) .chr (135), chr (209) .chr (136), chr (209) .chr (137)
  chr (209) .chr (138), chr (209) .chr (139), chr (209) .chr (140)
  chr (209) .chr (141), chr (209) .chr (142), chr (209) .chr (143)
  ); 
 
  $ Txt = str_replace (in_arr $, out_arr $, $ txt);
  retour txt $;
 }