Ubuntu Suomen keskustelualueet
Ubuntun käyttö => Ohjelmointi, palvelimet ja muu edistyneempi käyttö => Aiheen aloitti: teele - 31.10.22 - klo:22.14
-
Kokeiluohjelma löytää alku- ja lopputokenin rajaaman tekstin, kun alku- ja lopputokeni ovat samalla rivillä. Mutta jos alku- ja loppu ovat eri riveillä, etsintä ei onnistu
<?php
echo("muuntelu ");
$filetext = $file_content = file_get_contents("index.php");
$pattern = "/<h4>(.*?)<\/h4>/";
echo( preg_match($pattern, $filetext, $str1) );
print_r($str1);
echo($filetext); // tämä vain näyttää, että sivu toimii muuten
?>
Miten $patternia pitäisi muokata, että alku- ja lopputokeni voisivat olla eri riveillä.
-
Miten $patternia pitäisi muokata, että alku- ja lopputokeni voisivat olla eri riveillä.
Riippuu vähän siitä, voiko rivinvaihtoja esiintyä myös noiden <h4> tagien sisällä, vai vain niiden välissä.
/s parametri lisää rivinvaihdot dotmatchiin (eli "." natsaa myös rivinvaihtoihin, toiminee jälkimmäisessä tapauksessa)
$pattern = "/<h4>(.*?)<\/h4>/s";
/m parametria voi käyttää monirivisiin hakuihin (toiminee ensimmäisessä tapauksessa)
Lisätietoa:
https://www.php.net/manual/en/reference.pcre.pattern.modifiers.php
https://www.harecoded.com/true-multiline-regexp-in-php-the-i-miss-u-technique-2286008/
-
$filetext = $file_content = file_get_contents("index.php");
$pattern = "/<h4>(.*?)<\/h4>/";
echo( preg_match($pattern, $filetext, $str1) );
print_r($str1);
Mikä tässä on perimmäisenä tarkoituksena? Jos haluat tehdä PHP:llä kevyen templaattimekanismin sivuille tai sivujen osille, siihen on parempiakin keinoja. Esimerkiksi ob_start ja ob_get_clean auttavat:
https://spin.atomicobject.com/2019/07/24/php-output-buffering/
Laajempaan templaattien hyödyntämiseen kannattaa kuitenkin harkita valmiita templaattimoottoreita, kuten Twig tai Smarty.
-
Loppu s ratkaisi riviongelman :)
Mutta se perimmäinen tarkoitus alkoi sitten houlestuttaa. Tarkoitus oli etsiä omalta sivulta alku- ja loppumerkinnän välinen tekstialue ja korvata se uudella selaimen kautta käyttäen apuna html -textarea tilaa uuden tekstin lähettämiseen sivulle. Mutta vaikka korvaustoiminnon saisi onnistumaan, olisiko se turvallista. Mitä tapahtuisi, jos korvaavassa tekstissä olisi vaikka
<?php tee kaikkea ilkeää ja sotke hakemistot, joihin saat oikeudet ?>
Tarkoitus oli tietysti laittaa käyttäjänimi ja salasana, jotka oikeuttaisivat vain muutokset niiden kera, mutta voiko tällainen järjestely olla turvallinen. Miten oikeassa elämässä asin kanssa toimittaisiin.
-
Mutta se perimmäinen tarkoitus alkoi sitten houlestuttaa. Tarkoitus oli etsiä omalta sivulta alku- ja loppumerkinnän välinen tekstialue ja korvata se uudella selaimen kautta käyttäen apuna html -textarea tilaa uuden tekstin lähettämiseen sivulle. Mutta vaikka korvaustoiminnon saisi onnistumaan, olisiko se turvallista. Mitä tapahtuisi, jos korvaavassa tekstissä olisi vaikka
<?php tee kaikkea ilkeää ja sotke hakemistot, joihin saat oikeudet ?>
Vapaan syötteen tallentaminen, käsittely ja esittäminen on aina hieman riskialtista. Täytyy varmistaa, että saatava teksti sanitoidaan kohdeformaatin mukaisesti. Jos teksti halutaan näyttää HTML-sivulla tekstinä, PHP tarjoaa sitä varten funktion htmlspecialchars (https://www.php.net/manual/en/function.htmlspecialchars.php).
Olen myös edelleen sitä mieltä, että täydennettävä sivu kannattaa toteuttaa jollain templaattimekanismilla. Sisällön muokkaaminen säännöllisellä lausekkeella on purkkaratkaisu.
-
Mallikeiden käyttäminen vaikuttaa oikeastaan todella kätevältä. Nyt pitää vähän miettiä asioita uudestaan.
Hyvä juttu, että tältä palstalta saa neuvoja myös asioihin, joita ei edes ole ymmärtänyt kysyä.
Kiitos taas neuvonnasta :)