Kirjoittaja Aihe: [ ratkaistu ] php preg_match-etsintä monirivisestä lähdetekstistä  (Luettu 2487 kertaa)

teele

  • Käyttäjä
  • Viestejä: 809
    • Profiili
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

Koodia: [Valitse]
<?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ä.

« Viimeksi muokattu: 06.11.22 - klo:21.35 kirjoittanut teele »

kuutio

  • Käyttäjä
  • Viestejä: 160
    • Profiili
Vs: php preg_match-etsintä monirivisestä lähdetekstistä
« Vastaus #1 : 01.11.22 - klo:09.03 »
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)
Koodia: [Valitse]
$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/

nm

  • Käyttäjä
  • Viestejä: 16232
    • Profiili
Vs: php preg_match-etsintä monirivisestä lähdetekstistä
« Vastaus #2 : 01.11.22 - klo:11.36 »
Koodia: [Valitse]
$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.

teele

  • Käyttäjä
  • Viestejä: 809
    • Profiili
Vs: php preg_match-etsintä monirivisestä lähdetekstistä
« Vastaus #3 : 02.11.22 - klo:21.22 »

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.

nm

  • Käyttäjä
  • Viestejä: 16232
    • Profiili
Vs: php preg_match-etsintä monirivisestä lähdetekstistä
« Vastaus #4 : 02.11.22 - klo:23.31 »
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.

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.

teele

  • Käyttäjä
  • Viestejä: 809
    • Profiili
Vs: php preg_match-etsintä monirivisestä lähdetekstistä
« Vastaus #5 : 06.11.22 - klo:21.34 »

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  :)