Autor Zpráva
janky
Profil
Dobrý den, na webu a v databázi se mi zobrazují otazníky respektive čtverečky.
Po projedí zdejšího faq jsem vše upravil ale stale je někde problém. Všechny soubory mam uložené win 1250 (aspoň mi to ukazuje visual studio v pravo dole), všechny tabulky v databázi jsou win 1250-cs. Na indexu mám header("Content-type: text/html;charset=windows-1250");

A nevím si rady...

Obrazovka s náhledem kde jsou špatně znaky imgur.com/BNzhLlu
Obrazovka s databází imgur.com/kY1amLK
Kód kterým ukládám do db:
// Uloží cenu všech karet podle jména do databáze
function cerny_rytir_card_price_save($card, $database) {
    $card_layout = $card['layout'];
    $name = $card['name'];
    // Ošetřění řetězce vrátí pouze první jméno pokud má karta transform v  "//
    if($card_layout == 'transform' || $card_layout == 'adventure' || $card_layout == 'flip') {
        $name = trim(substr($card['name'], 0, strrpos($name, "//")));  
    }
    // Nahrazení znaků
    $name = str_replace('\'', '´', $name);
    $name = str_replace(' ', '%20', $name);

    $url = 'http://cernyrytir.cz/index.php3?akce=3&searchtype=card&searchname='.$name;
    $cards = loadCardCernyRytir($url);
    
    if($cards) {

        foreach ($cards as $card) {

            echo $card['name'].' - '.$card['set'].' - '.$card['price'].',-';
            echo '<br>';
            // $database->query('INSERT INTO card_price', [
            //     'card_name' => $card['name'],
            //     'set_name' => $card['set'],
            // ]);
            $result = $database->query('INSERT INTO card_price',[
                'store' => 'černý rytíř',
                'card_name' => trim($card['name']),
                'properties' => trim($card['properties']),
                'set_name' => trim($card['set']),
                'stock' => trim($card['stock']),
                'price' => $card['price'],
                'foil' => $card['foil'],
            ]);            
        }
    }
}

Děkuji za případnou pomoc
Kajman
Profil
A nastavil jste si kódování pro připojení do db na cp1250?
Některé časteji řešené dotazy pro MySQL - FAQ » MySQL a čeština
janky
Profil
Kajman:
Používám DIBI, nevím kam a jak a kam to zapsat.

$database = new Dibi\Connection([
    'driver'   => 'mysqli',
    'host'     => 'localhost',
    'username' => 'root',
    'password' => 'root',
    'database' => 'mtg',
]);

$database->set_charset("cp1250_czech_cs");

Zkoušel sem toto ale chlásí to chybu Uncaught LogicException: Call to undefined method Dibi\Connection::set_charset().
RastyAmateur
Profil
janky:
Zkus to narvat do toho konstruktoru, viz zde.
Keeehi
Profil
$database = new Dibi\Connection([
    'driver'   => 'mysqli',
    'host'     => 'localhost',
    'username' => 'root',
    'password' => 'root',
    'database' => 'mtg',
    'charset' => 'cp1250'
]);
viz
janky
Profil
taky Fatal error:
Fatal error: Uncaught Dibi\DriverException: Unknown character set: 'cp1250_bin' in D:\www\sideboard.cz\vendor\dibi\dibi\src\Dibi\Drivers\MySqliDriver.php:163 Stack trace: #0 D:\www\sideboard.cz\vendor\dibi\dibi\src\Dibi\Drivers\MySqliDriver.php(142): Dibi\Drivers\MySqliDriver::createException('Unknown charact...', 1115, 'SET NAMES 'cp12...') #1 D:\www\sideboard.cz\vendor\dibi\dibi\src\Dibi\Drivers\MySqliDriver.php(108): Dibi\Drivers\MySqliDriver->query('SET NAMES 'cp12...') #2 D:\www\sideboard.cz\vendor\dibi\dibi\src\Dibi\Connection.php(129): Dibi\Drivers\MySqliDriver->__construct(Array) #3 D:\www\sideboard.cz\vendor\dibi\dibi\src\Dibi\Connection.php(90): Dibi\Connection->connect() #4 D:\www\sideboard.cz\includes\database.php(4): Dibi\Connection->__construct(Array) #5 D:\www\sideboard.cz\index.php(10): require_once('D:\\www\\sideboar...') #6 {main} SQL: SET NAMES 'cp1250_bin' thrown in D:\www\sideboard.cz\vendor\dibi\dibi\src\Dibi\Drivers\MySqliDriver.php on line 163

Nejdou ani

cp1250_bin

cp1250_croatian_ci

cp1250_general_ci

cp1250_polish_ci
Kajman
Profil
Má tam být jen charset bez porovnání. Tedy cp1250.
janky
Profil
Funguje, děkuji za pomoc.
janky
Profil
Tak sem narazil na další problém.

Získávám data karet z json api a ty si ukládám do databáze. Ale když mam vše nastaveno na cp1250, tak json mi vrací špatně zformátovaný znak "—" někde ho nahradí — jinde zase −...

  ["type_line"]=>
  string(32) "Legendary Planeswalker — Lukka"

Má tam být:

  ["type_line"]=>
  string(32) "Legendary Planeswalker  — Lukka"

Dokáže někdo pomoct? Případně nabízím zakázku vytvoření funkce které nemusí být uložená v cp1250
Kajman
Profil
Pokud přijdou data z api v UTF8, tak si je převeďte díky php funkci
iconv
nebo řekněte databázi, že nyní pracujete s UTF8 kódováním.

Jen pozor, že cp1250 je omezená znaková sada a je jen podmnožinou UTF8 a může se stát, že nějaký znak nemá v cp1250 místo.

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm:

0