(Mod. vaihtoi otsikon. Alkuperäinen otsikko: ”Mysql Escape String riisuu html-tagit”)
Pikku ongelma mysql_real_escape - funktion kanssa. Käytän valmista alustaa, jossa ei ole käytössä PDO.
Teen pikku ohjelmaa, jolla voi lisätä artikkeleita CKEditorilla. Ongelma on se, että mysql_real_escape_string toimii kuin htmlspecialchars. Kaikki html-tagit muuttuvat tallennusvaiheessa. Ei hyvä.
Ei se kyllä niin toimi. Teet jotain väärin.
lainaus:
mysql_real_escape_string() calls MySQL's library function mysql_real_escape_string, which prepends backslashes to the following characters: \x00, \n, \r, \, ', " and \x1a.
Toimiiko sitten niin että siellä missä kyseinen HTML printataan ulos ajetaan se html_entity_decode:n läpi?
$output = html_entity_decode(stripslashes($html));
Tarkistin hommaa hiukan.
Teksti on jo alunperin ennen escapeta muuttunut.
Kun CKeditoriin kirjoittaa vaikka "Testiä" se tulostuu testissä (ennen tallennusvaihetta) näin:
<p>Testiä</p>
eli nuo tagit on muuttunu. Onkohan tätä alustaa säädetty jotenkin javascriptin puolellaa...
En tiedä alustasta mitään, mutta kokeile vaikka ottaa JS pois selaimesta ja samaa uudelleen?
Kannattaisi tutustua siihen, mikä se CKeditor on, jos sitä aikoo käyttää. Ei tuu hyvä, jos sokkona lähtee räpeltämään.
P.S. Otsikossa muuten puhut tagien poistamisesta, mutta aloitusviestissä kuitenkin vertaat toimintaa html_special_charsiin. Pitäisiköhän tuotakin kuvausta miettiä vielä toisen kerran.
Quirzo kirjoitti:
En tiedä alustasta mitään, mutta kokeile vaikka ottaa JS pois selaimesta ja samaa uudelleen?
Eipä taida onnistua. CKeditor tarttee Javascriptiä.
Alusta on Opencart 1.5.1
<html> <head> <body> <p>TESTIÄ</p> </head> </body></html>
Tästäpä näkyy tekemäni testin lähdekoodi. Tuo TESTIÄ risuineen on CKeditorin tuotetta.
Lisäys: Nyt olen vakuuttunut siitä että tekstin html-tagit muuttuvat jo CKEditorin textareassa. En tiedä syytä.
Kokeiles nyt ajaa tuo sen html_entity_decode:n läpi siellä sivulla missä se pitäisi näyttää. Tai toinen vaihtoehto voisi olla:
Quirzo kirjoitti:
Kokeiles nyt ajaa tuo sen html_entity_decode:n läpi siellä sivulla missä se pitäisi näyttää.
Ehdin juuri tehdä tuolla tavoin. Sain toimimaan.
Tässä ohjelmassa on Welcome- niminen tekstimoduuli jolla saa etusivulle/etusivuille tekstiä. Tarkistin, niin sen moduulin tekstit tulostetaan tuon html_entity_decode-funktion läpi.
Kaiva nyt ihmeessä CKeditorin dokumentaatio esille ja katso sieltä, mikä asetus pitää pistää falseksi, ettei editori tee automaattista enkoodausta. Aivan järjetöntä ajaa palvelimella decodea vain sen takia, ettei älyä pistää asetuksista encodea pois päältä.
The Alchemist kirjoitti:
Kaiva nyt ihmeessä CKeditorin dokumentaatio esille ja katso sieltä, mikä asetus pitää pistää falseksi, ettei editori tee automaattista enkoodausta. Aivan järjetöntä ajaa palvelimella decodea vain sen takia, ettei älyä pistää asetuksista encodea pois päältä.
Vilkaisin pikaisesti tiedostoa config.js. Asetus taitaa olla tässä:
config.htmlEncodeOutput = false;
En taida tässä nyt tuota muuttaa, koska tämä mitä teen menee levitykseen Opencartin sivustolle. Mutta hyvä tietää tuo homma.
pistemies kirjoitti:
En taida tässä nyt tuota muuttaa, koska tämä mitä teen menee levitykseen Opencartin sivustolle. Mutta hyvä tietää tuo homma.
Olenkin aina miettinyt, ketkä aina näitä ihmeen virityksiä tekee open source-sovelluksiin. Nyt tiedän.
Lebe80 kirjoitti:
Olenkin aina miettinyt, ketkä aina näitä ihmeen virityksiä tekee open source-sovelluksiin. Nyt tiedän.
Tuskimpa olet törmännyt minun tekemiin virityksiin :)
OpenCartin oletusasetus on kylläkin htmlEncodeOutput = false, joten jos viritelmäsi eivät toimi oletusasetuksilla, niin se on aika huono juttu.
The Alchemist kirjoitti:
OpenCartin oletusasetus on kylläkin htmlEncodeOutput = false, joten jos viritelmäsi eivät toimi oletusasetuksilla, niin se on aika huono juttu.
OpenCartin omien koodarien viritelmät toimii siltä osin yhtä kehnosti kuin minun, kuten mainitsin:
pistemies kirjoitti:
Tässä ohjelmassa on Welcome- niminen tekstimoduuli jolla saa etusivulle/etusivuille tekstiä. Tarkistin, niin sen moduulin tekstit tulostetaan tuon html_entity_decode-funktion läpi.
Ei sillä ole mitään väliä, millaista kuraa muut tekevät. Tee itse oikein.
The Alchemist kirjoitti:
Ei sillä ole mitään väliä, millaista kuraa muut tekevät. Tee itse oikein.
En ole haka javascript-puolella, mihin tuo CKeditorin toiminta liittyy :)
Tarkoitus on tehdä sellainen että toimii vähintään yhtä hyvin.
Lisäys: En tiedä, vaikuttaako asiaan, mutta tiedostossa common/filemanager.php kaikki palautetaan json_encode-funktion läpi. En tiedä johtuuko homma siitä, tuntuu että sille syötetään vain url-osoitteet ja tiedostopolut... sitä ei kannata joka tapauksessa muuttaa koska tämä pitäisi olla tarvittaessa yhteen sopiva muiden opencart-alustojen kanssa.
Aihe on jo aika vanha, joten et voi enää vastata siihen.