Problém s kódováním řetězce

Upozornění: Tohle vlákno je hodně staré a informace nemusí být platné pro současné Nette.
Stejsky
Člen | 7
+
0
-

Ahoj,
potřeboval bych poradit s divným kódováním řetězce. Nemyslím si, že to je vyloženě Nette chyba, proto se případně omlouvám za offtopic. Potřebuju zpracovávat XLS soubor a používám k tomu knihovnu PHPExcel („https://github.com/PHPOffice/PHPExcel“).
Mám ovšem problém s kódováním. Buňka obsahuje například text Kroužkový blok s boční spirálou. Uložím si to do proměnné a když dám Debugger::dump, vypíše se mi Krou\xc5\xbekov\xc3\xbd blok s bo\xc4\x8dn\xc3\xad spir\xc3\xa1lou. Přitom echo vypíše řetězec správně.
V tomhle tvaru se mi ten řetězec ani neuloží do DB. Už jsem na tom strávil několik hodin používáním všech možnejch návodů, co jsem na internetu našel, ale nejsem schopnej to nijak vyřešit.

<?php
	private function processLine($rowData)
	{
		$entity = new ProductEntity();
		$entity->code = $rowData[0][0];
		$entity->description = $rowData[0][7];
		dump($entity->description);
		// Vypíše Krou\xc5\xbekov\xc3\xbd blok s bo\xc4\x8dn\xc3\xad spir\xc3\xa1lou
		echo $entity->description;
		// Vypíše (správně) Kroužkový blok s boční spirálou

		$this->mitapModel->addItem($entity);
		// Uloží jenom code, description zůstane prázdný
	}
?>

Budu vděčný za jakoukoliv radu.

Unlink
Člen | 298
+
0
-

A Strings::fixEncoding() si neskúšal?

Nette\Utils\Strings::fixEncoding

Stejsky
Člen | 7
+
0
-

Zkoušel, bohužel stále stejný výsledek :(

Jan Tvrdík
Nette guru | 2595
+
0
-

Asi máš to $this->mitapModel->addItem rozbitý. Zapni debugger a chybu odstraň.

Stejsky
Člen | 7
+
0
-

Tohle funguje, mám tam mapper, který z objectu vytvoří array a vloží ji do databáze. Zkoušel jsem tam i ručně zadat hodnoty, takže jsem dal $entity->description = ‚Nějakej text‘ a v pohodě se mi to všechno uložilo.

llook
Člen | 407
+
0
-

Nemáš špatně nastavené kódování databázové tabulky (třeba latin1_swedish_ci) nebo špatný charset na connection? Ten řetězec vypadá jako validní UTF-8 řetězec.

Stejsky
Člen | 7
+
0
-

Tabulka má kódování utf8_czech_ci, stejně jako celá DB. Charset u connection jsem nijak neměnil, používám čistej Database\Context z aktuální Nette verze.

Šaman
Člen | 2666
+
0
-

A co ti píše dump($rowData[0][7]); ještě před přiřazením do entity?

Stejsky
Člen | 7
+
0
-

Pořád to samé

Unlink
Člen | 298
+
0
-

A aký dotaz sa posiela do databázy?

Stejsky
Člen | 7
+
0
-

Když jsem si ve třídě Selection dumpnul $result v metodě insert, dostanu toto:
‚Nette\Database\ResultSet #02fb
connection private ⇒ Nette\Database\Connection #8822
supplementalDriver private ⇒ Nette\Database\Drivers\MySqlDriver #d149
connection private ⇒ Nette\Database\Connection #8822
pdoStatement private ⇒ PDOStatement #fdcd
queryString ⇒ „INSERT INTO mitap_product (id, code, description) VALUES (NULL, '325844‘, ?)“ (84)
result private ⇒ NULL
resultKey private => –1
results private ⇒ NULL
time private ⇒ 0.13172388076782
queryString private ⇒ „INSERT INTO mitap_product (id, code, description) VALUES (NULL, ‚325844‘, ?)“ (84)
params private ⇒ array (1)
0 ⇒ „Krou\xc5\xbekov\xc3\xbd blok s bo\xc4\x8dn\xc3\xad spir\xc3\xa1lou, eurod\xc4\x9brov\xc3\xa1n\xc3\xad, perforace, 80 list\xc5\xaf.\nProdejn\xc3\xad jednotka: 1 ks.\x00“ (103)
types private ⇒ NULL'

David Grudl
Nette Core | 8239
+
0
-

Dělá to ten \x00 na konci řetězce

Stejsky
Člen | 7
+
0
-

Paráda, děkuju Davide, už to funguje :-)