jurchiks Posted November 14, 2013 Report Share Posted November 14, 2013 Ir tāda debīla problēma, ka nevaru palaist dažus skriptus no konsoles uz sava dev box, jo kaut kādā dīvainā veidā Windows kaut ko maina skripta izpildē un lietas nestrādā tā, kā vajag. Konkrēts piemērs: php skripts, kas ievelk XML failu, izparsē to un ievieto datus datubāzē. Uz production box (Ubuntu 13.04) nekādu problēmu nav, skriptu var izpildīt konsolē manuāli, normālā kron izpilde bez aizķeršanās, izpilde caur acp arī. Uz dev box (gan mājās, gan darbā tas pats): no acp problēmu nav (bet tur ir lapas buferēšana un izpilde aizņem laiku, katru reizi jāgaida, kamēr izpildīsies, līdz ieraudzīs rezultātu), kron uz dev box nav, bet caur konsoli ir problēmas: izpildot skriptu, brīdī, kad dati tiek ievietoti datubāzē, mysql lamājas par non-UTF-8 character sequences: SQLSTATE[HY000]: General error: 1366 Incorrect string value: '\xC5 trau...' for column 'name' at row 1 Teksts, par kuru lamājas: "Kartogrāfija tūrismam. Jānis Štrauhmanis." Otrs piemērs: SQLSTATE[HY000]: General error: 1366 Incorrect string value: '\xD0 \xD0\xBE\xD0\xB1...' for column 'name' at row 1 Teksts: "Robotpolicists. Robocop. Робот-полицейский. (DVD)" Pirms datu ievietošanas datubāzē noteicu esošo encoding un ielogoju to, tas ir UTF-8: $enc = mb_detect_encoding($name, 'UTF-8,ISO-8859-1,ISO-8859-5,ISO-8859-9,ISO-8859-15', true); \Logger::debug('1st encoding: ', $enc); // vienmēr UTF-8 if (!$enc) { $enc = mb_detect_encoding($name, mb_detect_order(), true); \Logger::debug('2nd encoding: ', $enc); // nekad netika ielogots } if (!$enc) { $this->logError('Failed to detect encoding for text: ' . $name); $enc = 'UTF-8'; } \Logger::debug('final encoding: ', $enc); Manā skatījumā problēma nav kodā, jo visur, izņemot win konsoli, viss strādā perfekti. Jautājums ir - kas šo stulbo uzvedību varētu izraisīt un kā to atrisināt? Baigi traucē, ja nevar skatīties skripta output realtaimā. Link to comment Share on other sites More sharing options...
Kavacky Posted November 14, 2013 Report Share Posted November 14, 2013 Un kāpēc tu mēģini insertot šito herņu - "\xD0 \xD0\xBE\xD0\xB1...", nevis normālu UTF8 tekstu? Link to comment Share on other sites More sharing options...
briedis Posted November 14, 2013 Report Share Posted November 14, 2013 Un kāpēc tu mēģini insertot šito herņu - "\xD0 \xD0\xBE\xD0\xB1...", nevis normālu UTF8 tekstu? Kāpēc, lai nevarētu insertot to, ko grib? Vienkārši imho vajag pareizi eskeipot, nevajadzētu būt nekādām problēmām. Kur ir insertošanas kods? Link to comment Share on other sites More sharing options...
jurchiks Posted November 15, 2013 Author Report Share Posted November 15, 2013 (edited) Tā herņa vispār tiek atpazīta kā UTF-8 teksts, ja paņemtu acis rokās, ieraudzītu, ko es uzrakstīju. Visur citur, izņemot Windows konsoli, tas arī tiek atpazīts kā UTF-8 un nekur nav nekādu eroru. Ko man iesākt, kā izdabāt Windows konsolei? Insertošanas kods ir šāds: http://pastebin.com/ME6vMKM7 $prodInsert satur PDO prepared statement ar norādītajām kolonnām, values() tiek ievietotas internal masīvā, execute() inserto (PDOStatement::execute($values)). Nekādas iekšējas datu apstrādes db abstrakcijā nav, tas arī nebūtu prātīgi. Visi faili manā projektā ir kodēti UTF-8. Ko tu domā ar pareizu eskeipošanu? Edited November 15, 2013 by jurchiks Link to comment Share on other sites More sharing options...
jurchiks Posted November 15, 2013 Author Report Share Posted November 15, 2013 (edited) Ok, padebugoju skriptu tā nopietnāk, izskatās, ka preg_replace kaut ko ne tā izdara: http://pastebin.com/67Hzehfb Šis kods kaut ko izdara ar burtu "Š" un pirmo burtu no vārda "Робот"... Pieliekot u modifikatoru visiem patterniem, problēmas vairs nav, vienīgi, cik atceros, man bija iemesls noņemt to, jo kaut kas strādāja nepareizi... Velns viņu zin, kas. Cerams, ka nekas nenobruks. Edited November 15, 2013 by jurchiks Link to comment Share on other sites More sharing options...
Recommended Posts