Autor Zpráva
Onecar
Profil
Zdravím,

pokouším se právě získat data ze zdroje, který je ve formátu XML a kódován v ISO-8859-1. Jakmile jej stáhnu a "rozparsuju" (získám jednotlivé <item> s dalšími tagy uvnitř), potřebuju si je vložit do databáze – a zde je právě problém, protože mě lehce zlobí kódování.

Ve výsledném textu se objevuje znak "Â", většinou před znakem €, ale i jinde (ve zdrojovém textu není, takže se objevil "někde na cestě"). Nepodařilo se mi vypozorovat důvod, proč se chová takto "náhodně", ale je tam. Zajímavější je, že se mi ani nedaří ručně odstranit (nepomáhá str_replace() ani preg_replace() ). Script, který se o vše stará, je uložen v UTF-8 a vůbec všechno je nastaveno na UTF-8. Situaci trochu zlehčuje skutečnost, že data jsou v angličtině, stejně ale nechápu, proč se tam vůbec objevuje.

Zkoušel jsem kouzla s iconv(), ale nepochodil jsem. Používal jsem konstrukci níže, v proměnné $text je text, který je kódován v ISO-8859-1.

<? $text = iconv ('ISO-8859-1', 'UTF-8', $text); ?>


Pokusy s //TRANSLIT a //IGNORE také selhaly, ba dokonce přidaly ještě další neidentifikovatelný bordel. Jak jsem již napsal, otravný znak se mi ani nedaří z textu odstranit (nevím proč). Něco jsem musel přehlédnout, najde se zkušenější kdo poradí?

Předem velký dík.
Onecar
Profil
Přidám ještě celý zdroják:

  function catch_feed_techpowerup () {
    
    $articles = catch_feed ('http://www.techpowerup.com/rss/', 'item');
    $web_name = "techPowerUp!";
    db_insert_sourcenmonth ($web_name, 'aah_sources');
    db_insert_sourcenmonth (date("F Y"), 'aah_months');
    
    foreach ($articles as $singles) {   
      
      $description = $singles['description'];
      $description = preg_replace('~<br(.*?)>~i', '', $description); // všechny preg_replace() čistí zdrojový kód od zbytečností
      $description = preg_replace('~<a(.*?)>~i', '', $description);
      $description = preg_replace('~</a>~i', '', $description);
      $description = preg_replace('~<img(.*?)>~i', '', $description);
      $description = preg_replace('~<small>(.*?)</small>~i', '', $description);
      $description = preg_replace('~<small>~i', '', $description);
      $description = preg_replace('~</small>~i', '', $description);
      
      echo "<<< ".$description." >>>
      
      ";

    }
    
    exit;
    
  }


Funkce catch_feed() načte data z XML souboru a vrátí je jako pole, se kterým pracuji dále. O kódování se vůbec nestará, prostě jen načte a rozseká do pole. Nic víc, nic míň. Onen zatracený znak se vyskytuje právě v proměnné $description. Z kódu jsem umazal část starající se o vložení do databáze, nehodlám ji spouštět dokud nevyřeším problém s kódováním.
Onecar
Profil
Asi vyřešeno, dal jsem refresh a znak je pryč. Dokonce mi funguje i str_replace(). Možná bych si měl dát pár minut pauzu :-D.

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: