Autor Zpráva
Jozin
Profil
Zdravím, problémů se špatným kódováním je hodně. Sám je umím vyřešit, ale pouze, když mám přístup k databázi, nebo alespoň k dotazům na databázi.

Můj zaměstnavatel po mě chce zpracovávat data, což není nic těžkého a zvládl jsem to.

Já vidím systémové části, které jsem sám napsal, zbytek je pro mě neviditelný a nemůžu k nim. Kvůli testování vstupních údajů mi zaměstnavatel dal v systémovém souboru definoval $resource, ve které je právě resource nějakého dotazu.

Já to tedy pomocí funkce mysql_fetch_assoc přeložil na data, ale ouha místo prázdných řetězců, které se tam vyskytují je tam nějaký podivný znak a když ho vypíši, tak vypíše _x0000_.

Databáze je ve windows-1250. Můj script jsem také předělal do w1250, ale problém setrvává, chtěl jsem to zkusit ještě pomocí header, ale bohužel systém je stavěn tak, že není oddělena logika od vzhledu a tak nemohu použít header.

Napadá někoho, jak předělat kódování? Popřípadě jak to udělat, aby vyšel správný výstup?
Tori
Profil
Jozin:
x0000 by měl být znak NUL, jestli se nepletu - prostě sloupce buď nemají nastaven jako výchozí prázdný řetězec, anebo nejsou NOT NULL. Funkce mysql_fetch_* tyto hodnoty automaticky převádějí na PHP NULL.
Jakým způsobem s tím výstupem pracujete, že je pro vás rozdíl mezi string(0) a NULL?
A je problém jen s tímto znakem, anebo je i jinak rozhozená čeština?
Jozin
Profil
Tori:
Já data nijak nekontroluji, protože mohou nabývat jakýchkoli hodnot. Vytvářím z těchto dat excelovský dokument.

Pokud je to PHP null, tak mi stačí tedy jednoduše ověřovat
<?php
//...
if($pole === null) $pole = '';
//...

Chápu to správně?

//EDIT:
Čeština je jinak vpořádku.
a můj pokus, i s 2 = nefunguje. Když je to tedy null jak ho mám odchytit?

EDIT2: pro mě není rozdíl string(0) a NULL, ale mám právě string(1) "?", ten otazník je v černém poli. No a při výstupu v excelovském dokumentu je právě uvedené _x0000_
Tori
Profil
Když natvrdo zadáte prázdný řetězec, tak se do .xls zapíše správně, anebo je potřeba použít nějaký bílý znak? Pro oba případy by mělo jít
if (empty($pole)) $pole = $prazdnyZnak;


 Edit: empty() vyhodnotí jako true tyto hodnoty: prázdné pole, prázdný řetězec, FALSE, 0, "0", NULL. Tohle by mělo ošetřit nulu jako číslo:
if (empty($pole) && !is_numeric($pole)) $pole = '';
Jozin
Profil
Tori:
Děkuji za snahu. Mohu použít prázdný řetězec. Zrovna teď jsem dokončil úpravu a funguje to, ale zkusím to s tím empty, protože je to kratší. Moje řešení je takto:
<?php

//...
if(strlen($data[$key]) == 1 && hexdec($data[$key]) == 0) $data[$key] = '';
//...

Nedal jsem rovnou hexdec, protože se tam nachází i hodnoty 0 což je také nula, ale v tom případě se ta nula má vypsat. Třeba bude fungovat to empty. Děkuji za pomoc a zamykám téma.
Toto téma je uzamčeno. Odpověď nelze zaslat.

0