Olen tässä aloitteleva PHP vääntäjä ja ajattelin yrittää rakentaa tällaista skriptiä, joka imuroi tietyn internet sivun ja parseroi sitten sieltä vain tietyt pätkät tekstiä irti. Teoriassa tuon olen saanut toimimaan aika mukavasti, mutta välillä tulee ongelmaa, koska curl imuroi sivun muotoiluineen ja nyt sen parserointi on vaikeampaa toteuttaa. Onko olemassa suoraa curlin tyyppistä käskyä, jolla haettaisiin vain sivun sisältö, ilman muotoiluja, eli siis pelkkä nettisivulla näkyvä teksti?
lynx --dump -vivun kanssa?
Edit: eikun niin, PHP:ssähän oli tuollanen: strip_tags(), se on varmaan, mitä haet.
Usein niistä "muotoiluista" eli HTML-tageista on huomattavaa etua parseroinnin aikana. Yksi tapa poimia teksti tagien seasta ovat säännölliset lausekkeet, joita käytetään mm. tässä koodivinkissä. Voit poimia tekstin tageineen ja käyttää sitten PHP:n funktiota strip_tags tagien poistoon.
Kiitos Blaze ja Metabolix. Totta, huomasin, kun tein tätä php skriptiä, että nuista tageista todellakin on hyötyä parseroinnissa. Nyt sain homman toimimaan..
Olisikos tähän ratkaisua, kun tämä ei toimi?
str_replace("ä","a",$teksti);
Eli merkkijonosta skandit pois, osaatteko vinkata?
-Viljami-
Oletko kokeillut tätä?
$teksti = str_replace("ä","a",$teksti);
Sitten vielä, että kaikki 6 merkkiä pitää käydä eriksen läpi.
viljami kirjoitti:
Kiitos Blaze ja Metabolix. Totta, huomasin, kun tein tätä php skriptiä, että nuista tageista todellakin on hyötyä parseroinnissa. Nyt sain homman toimimaan..
Olisikos tähän ratkaisua, kun tämä ei toimi?
str_replace("ä","a",$teksti);
Eli merkkijonosta skandit pois, osaatteko vinkata?
-Viljami-
Millä tavalla ei toimi? Huomioithan, että funktio ei muuta alkuperäistä merkkijonoa ($teksti
), vaan palauttaa viittauksen uuteen merkkijonoon, josta halutut merkit on korvattu.
Miksi edes haluat merkkijonosta skandit pois? Suomenkielista tekstia jossa aakkoset on eivat ole aakkosia on hairitsevaa lukea. Ääkkösten poistamiselle on hyvin vähän päteviä syitä vuonna 2011 (eikä ole ollut todella pitkään aikaan).
Huomoithan, että jos $teksti
-merkkijono ei ole samassa merkistössä kuin PHP, str_replace
ei toimi oikein. Esimerkiksi seuraava esimerkki toimii oletetusti, mutta kommentoitu osio rikkoisi toiminnan.
$merkkijono = "ÅÄÖåäö"; /* $merkkijono = utf8_encode($merkkijono); */ $merkkijono = str_replace(array("Å", "å"), array("Å", "å"), $merkkijono);
Moi, Siis sijoitin muutetun tekstin muuttujaan, Juurikin tällätavoin
$teksti = str_replace("ä","a",$teksti);
Mutta ei tunnu toimivan. Jos muutan koodin vaikka muotoon:
$teksti = str_replace("u","a",$teksti);
...Niin toimii hyvin. Koodi metsästää kaikki u-kirjaimet ja vaihtaa ne a-kirjaimiksi.
Ja eg, mikä on pätevä syy poistaa skandit ja mikä ei. Tämä PHP generoi tällä hetkellä RSS syötettä, jota 4x20 merkkinen LCD näyttö tulostaa. Tämä näyttö ei tue natiivina skandeja vaan tulostaa esimerkiksi ä:n tilalta µ merkin. Eli tänään = tµnµµn. Käytännössä siis skandittoman version lukeminen voisi kuitenkin olla mielekkäämpää, kuin tuon. Se miksi näyttö ei tulosta skandeja johtuu siitä, että ATmega mikro-ohjain tuossa näytön ja USB:n välissä ei osaa kirjoittaa näytölle skandeja. Skandit kun ovat näytölle erikoismerkkejä, jotka pitää luoda pikseli kerrallaan omaan muistialueeseen. Tarkoitus on tuo mikrokontrolleri muokata käsittelemään skanditkin, joskus, kun siihen kerran kooditkin on. Mutta tämä menee sivuraiteille.
Voisin itsekin olettaa, että syy sille, miksi tuo ei str_replace ei toimi on joku merkistöjen ero...
Jos et osaa varmuudella selvittää oikeita merkistöjä, kokeile lisätä tiedon hakemisen jälkeen joko utf8_encode tai utf8_decode ja toivo parasta.
viljami kirjoitti:
Ja eg, mikä on pätevä syy poistaa skandit ja mikä ei. Tämä PHP generoi tällä hetkellä RSS syötettä, jota 4x20 merkkinen LCD näyttö tulostaa.
Ei kai se näyttö sitä suoraan (itsestään) tulosta? Tietysti, jos näytön ja RSS-syötteen väliin ei omaa ohjelmaa saa, voi olla ihan pätevä syy karsia 'huonot' merkit PHP:nkin puolella.
Itseasiassa näytön ja RSS syötteen välissä on valmis netistä imuroitu softa. Se toimii vallan mainiosti ja ymmärtää lukemastaan RSS syötteestä skandit. Softa myös lähettää skandit kaiketi ihan ok näytön ja PC väliselle sulautetulle järjestelmälle. Ongelma siis todellakin on sulautettu järjestelmä näytön ja PC:n välillä. Tämä sulautettu järjestelmä ei osaa kirjoittaa skandeja näytölle. Koska tämä sulautettu järjestelmä on kiinan maalla suunniteltua kamaa. Samoin näytön oma merkistö ei tunne skandeja, vaan ne on piirrettävä pikseli kerrallaan näytölle. Joten siis näytölle kirjoitettavasta skandista on vastuussa sitä ohjaava sulautettu järjestelmä..
Thx Metabolix, testailen tilannetta..
viljami kirjoitti:
Moi, Siis sijoitin muutetun tekstin muuttujaan, Juurikin tällätavoin
$teksti = str_replace("ä","a",$teksti);Mutta ei tunnu toimivan. Jos muutan koodin vaikka muotoon:
$teksti = str_replace("u","a",$teksti);...Niin toimii hyvin. Koodi metsästää kaikki u-kirjaimet ja vaihtaa ne a-kirjaimiksi.
Yksi mahdollisuus olisi, että $teksti-merkkijonossa ääkköset on korvattu entiteeteillä, jolloin str_replace-funktiossa tarvitsee korvata se entiteetti toisella merkillä, ei entiteetin tulosta.
<?php $teksti = "Tänään on maanantai."; $teksti = str_replace("ä", "a", $teksti); // Ei toimi $teksti = str_replace("ä", "a", $teksti); // Toimii
Aihe on jo aika vanha, joten et voi enää vastata siihen.