This page has been robot translated, sorry for typos if any. Original content here.

Funktionen der Code-Konvertierung UTF8-Win, Win-UTF8

Manchmal gibt es solche Momente, in denen man Daten von einer Codierung in eine andere umwandeln muss.

In diesem Artikel beschreiben wir einige Funktionen, die ich selbst mehr als einmal benutzt habe.

Funktionen und Skripte werden nicht von mir geschrieben, aber sie funktionieren erfolgreich und helfen oft bei PHP-Javascript-Interaktionen.

Also, Transcodierung von UTF-8 zu Windows-1251 und zurück:

Funktion zuerst von utf8 in cp1251

 Funktion utf8_win1 ($ s) {
 $ s = strtr ($ s, Feld ("\ xD0 \ xB0" => "a", "\ xD0 \ x90" => "A", "\ xD0 \ xB1" => "b", "\ xD0 \ x91 "=>" B ",
  "\ xD0 \ xB2" => "c", "\ xD0 \ x92" => "C", "\ xD0 \ xB3" => "g", "\ xD0 \ x93" => "G", "\ xD0 \ xB4 "=>" d ",
  "\ xD0 \ x94" => "D", "\ xD0 \ xB5" => "e", "\ xD0 \ x95" => "E", "\ xD1 \ x91" => "ё", "\ xD0 \ x81 "=>" Ё ",
  "\ xD0 \ xB6" => "g", "\ xD0 \ x96" => "G", "\ xD0 \ xB7" => "g", "\ xD0 \ x97" => "G", "\ xD0 \ xB8 "=>" und ",
  "\ xD0 \ x98" => "I", "\ xD0 \ xB9" => "y", "\ xD0 \ x99" => "Y", "\ xD0 \ xBA" => "k", "\ xD0 \ x9A "=>" K ",
  "\ xD0 \ xBB" => "l", "\ xD0 \ x9B" => "L", "\ xD0 \ xBC" => "m", "\ xD0 \ x9C" => "M", "\ xD0 \ xBD "=>" n ",
  "\ xD0 \ x9D" => "H", "\ xD0 \ xBE" => "o", "\ xD0 \ x9E" => "O", "\ xD0 \ xBF" => "n", "\ xD0 \ x9F "=>" P ",
  "\ xD1 \ x80" => "p", "\ xD0 \ xA0" => "P", "\ xD1 \ x81" => "c", "\ xD0 \ xA1" => "C", "\ xD1 \ x82 "=>" t ",
  "\ xD0 \ xA2" => "T", "\ xD1 \ x83" => "y", "\ xD0 \ xA3" => "U", "\ xD1 \ x84" => "f", "\ xD0 \ xA4 "=>" F ",
  "\ xD1 \ x85" => "x", "\ xD0 \ xA5" => "X", "\ xD1 \ x86" => "c", "\ xD0 \ xA6" => "C", "\ xD1 \ x87 "=>" h ",
  "\ xD0 \ xA7" => "H", "\ xD1 \ x88" => "W", "\ xD0 \ xA8" => "W", "\ xD1 \ x89" => "U", "\ xD0 \ xA9 "=>" u ",
  "\ xD1 \ x8A" => "ъ", "\ xD0 \ xAA" => "b", "\ xD1 \ x8B" => "s", "\ xD0 \ xAB" => "Y", "\ xD1 \ x8C "=>" ь ",
  "\ xD0 \ xAC" => "Ь", "\ xD1 \ x8D" => "e", "\ xD0 \ xAD" => "E", "\ xD1 \ x8E" => "u", \ xD0 \ xAE "=>" Yu ",
  "\ xD1 \ x8F" => "I", "\ xD0 \ xAF" => "I"));
 gib $ s zurück;
 }

Die Funktion des zweiten utf8 in cp1251

 Funktion utf8_win ($ s) {$ out = "";  $ c1 = "";  $ byte2 = falsch;  für ($ c = 0; $ c <strlen ($ s); $ c ++) {$ i = ord ($ s [$ c]);  if ($ i <= 127) $ out. = $ s [$ c];  if ($ byte2) {$ new_c2 = ($ c1 & 3) * 64 + ($ i & 63);  $ new_c1 = ($ c1 >> 2) & 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 = falsch;  } if (($ i >> 5) == 6) {$ c1 = $ i;  $ byte2 = wahr;  }} return $ out;  } 

Funktion zuerst von Windows-1251 in utf-8

  Funktion win_utf8 ($ in_text) { 
  $ output = "";
  $ andere [1025] = "Ё";
  $ other [1105] = "ё";
  $ anderes [1028] = "Є";
  $ andere [1108] = "є";
  $ anderes [1030] = "Ich";
  $ anderes [1110] = "ich";
  $ anderes [1031] = "Ї";
  $ andere [1111] = "ї";
  für ($ i = 0; $ i <strlen ($ in_text); $ i ++) {
  if (ord ($ in_text {$ i})> 191) {
  $ output. = "& #". (ord ($ in_text {$ i}) + 848). ";";
  } sonst {
  if (array_search ($ in_text {$ i}, $ sonstiges) === false) {
  $ output. = $ in_text {$ i};
  } sonst {
  $ output. = "& #". array_search ($ in_text {$ i}, $ andere). ";";
  }
  }
  }
  Rückgabe von $ output;
 }

Die Umwandlungsfunktion von Windows-1251 zu utf-8

Früher habe ich iconv verwendet ("CP1251?", "UTF-8 ?, $ Text_for_convert") , aber wie Sie wissen, belastet iconv den Server mit einer größeren Last und läuft langsamer als die unten dargestellte Funktion.

Der Verzicht auf iconv wurde auch durch die Tatsache erzwungen, dass zu einem bestimmten Zeitpunkt bei der Neucodierung von Windows-1251 zu UTF-8 ohne ersichtlichen Grund diese Funktion begann, eine leere Zeichenfolge zurückzugeben.

!!! Wenn Sie $ in_arr und $ out_arr vertauschen, arbeitet die Funktion "in die entgegengesetzte Richtung", d.h. konvertiert UTF-8 in CP-1251.

 Funktion 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);
  zurückgeben $ txt;
 }