Kirjautuminen

Haku

Tehtävät

Keskustelu: Nettisivujen teko: PHP5 ja array

Sivun loppuun

pistemies [05.01.2007 23:25:13]

#

Hei!

Pikkupulma. Eräässä xml-tiedostossa pikku ä-kirjain on muodossa ä. PHP5 katkaisee merkkijonon tuosta kohtaa ja tulostaa arrayn arvoon tiedon tuosta Ä-kirjaimesta alkaen. Mistä moinen johtuu? Miten saan koko tekstin arrayn arvoon?

Ps. Oikeastaan se ei ole Ä-kirjain vaan merkki 0195.

Cornix [05.01.2007 23:38:48]

#

sen XML-tiedoston merkistökoodaus on UTF-8, mutta luet sitä jonaki muuna (esim. ISO-8859-1:nä eli fi-latin1:nä)
Avaa XML-tiedostos tekstieditoriin ja muuta sen merkistökoodausta, ni saat todennäkösesti toimimaan paremmin.

pistemies [05.01.2007 23:49:59]

#

Kyseessä on ulkoinen rss-syöte, jonka tulostan php:n xml_parse funktioilla (start_tag, cdata ja end_tags) arrayhyn.
Pitää kokeilla lukea se muistiin, muuttaa ja vasta sitten syöttää xml_parse - funktiolle. Onko tuon muuttamiseen muuta kuin str_replace-jutut? Merkistökoodauksen muuttaminen jollain funktiolla?

Blaze [06.01.2007 00:12:32]

#

https://www.php.net/manual/en/function.utf8-decode.php

pistemies [06.01.2007 19:04:26]

#

Kuinkahan sen saisi tuolla onnistumaan?

$data = xml_parse($xml_parser,utf8_decode(file_get_contents($file)));

Tämä ilmoittaa arrayna tulostuksessa seuraavaa:

XML error: Invalid character at line 7

Tuo on ensimmäinen rivi xml-tiedostossa, jossa nuo mainitut merkinnät on. Kun tutkin tiedostoa file_get_contents funktiolla, utf8-koodausmerkit näkyy. Kun luen sen file-funktiolla, ne näkyy ä ja ö-kirjaimina jne. Tulostettaessa sitten html-muodossa katkaisee edelleen merkkijonon samasta kohtaa.

Ps. Testi:

$fp=file_get_contents($file);
echo htmlspecialchars(utf8_decode($fp))."<br>";
// Tulostaa ä -merkin kohdalla ?

pistemies [06.01.2007 20:15:44]

#

Myös seuraava muuttaa tuon utf8 merkin kysymysmerkiksi:

$fp=file_get_contents($file);

$fpw=htmlspecialchars($fp);

    $fpw=str_replace("ä","ä",$fpw);
    echo $fpw;

Onko tätä mahdollista säätää PHP:n asetuksista?

PS. Nyt tämä str_replace tulostaa oikein. xml_parse-funktiolle syötettynä kuitenkin antaa tuon virheilmoituksen.
PHP4:ssä ei ollut ongelmia tämän saman tiedoston suhteen, siinä kaikki tieto tulostui arrayn arvoon.

pistemies [07.01.2007 00:58:26]

#

Tämä on nyt tässä vaiheessa

    $datat=file_get_contents($file);
     $datat=str_replace("UTF-8","ISO-8859-1",$datat);

$data = xml_parse($xml_parser,$datat);

Tämän ansiosta ei herjaa virheellistä xml-tiedostoa. Edelleen on sama ongelma. UTF-8 merkit katkaisee merkkijonon. Merkit näkyy nyt oikein ä- ja ö-kirjaimina. Sekä utf8decode että str_replace muuttavat ne kysymysmerkiksi. Ja senkin jälkeen merkkijono pysyy katkaistuna.

pistemies [07.01.2007 13:54:05]

#

Sama ongelma on myös xml-tiedostoissa, jotka jo valmiiksi ovat ISO-8859-1 tyyppiä. Merkkijono katkeaa ensimmäisen ä- kirjaimen kohdalla.
En keksi tähän muuta, kuin todeta, että syynä on lähes varmasti jokin PHP 5.2:n ominaisuus noissa xml-funktiossa, miten se niitä tulkitsee.

pistemies [08.01.2007 12:08:51]

#

Mutta ei hätää. Mureakuhasta löytyi PHP :lle tehty luokka, joka hoitaa homman paremmin kuin nuo php.netin esimerkit.

Olga [08.01.2007 12:35:15]

#

Oletko muuten kokeillut SimpleXML-kirjastoa? Todella mainio apuväline XML:n käpistelyyn, suosittelen!

pistemies [08.01.2007 16:54:40]

#

Olga kirjoitti:

Oletko muuten kokeillut SimpleXML-kirjastoa? Todella mainio apuväline XML:n käpistelyyn, suosittelen!

Kiitos! Nuo on kans oikein hyviä!


Sivun alkuun

Vastaus

Aihe on jo aika vanha, joten et voi enää vastata siihen.

Tietoa sivustosta