Sostituire una sottostringa a una stringa data

angeloulivieri

Utente Attivo
8 Set 2009
71
0
0
Salve, vorrei effettuare la seguente operazione:

$stringa=" stringa che ho scritto di prova ";
$start= "stringa"
$end= "prova"
$to_insert="messa per"

inserire $to_insert in $stringa cancellando ciò che è compreso tra $start e $end

ottenendo: stringa= stringa messa per prova

.......come si fa??
Grazie
 
Modificare un file .php tramite un altro file .php

Ho riscontrato problemi utilizzando la funzione:
str_replace ($daCambiare, $sostituto, $fileContent);

che ho usato per modificare un file php. Il problema è che voglio sostituire una stringa di testo nel file con un'altra stringa.
Finché $sostituto è di pochi caratteri, la parola viene sostituita, ma quando utilizzo molti più caratteri (intere parti di codice html) la funzione non cambia mai il file!
 
Ultima modifica:
non aprire due discussioni per un unico argomento, posta il codice che hai scitto fino ad ora
 
ciao
avevo guardato anche io, ma quello che avevo trovato non mi sembrava adatto (anche substr_) perche era il contrario di quello che voleva angeloulivieri, un conto è sapre (come nella grappa) quale è la testa e la coda prelevando il cuore, e un conte conoscere il cuore e prelevarlo.
secondo me, ma posso sbagliarmi, non è sufficiente una funzione del core php, ma bisogna costruirsene una che analizzi la stringa cerchi o la testa/coda e sostituisca qullo che c'è in mezzo, o saper quello che c'è in mezzzo e sostituirlo. dato le innumerevoli possibilità non credo che sia una cosa facile anche se fattibile
 
Scusate per la doppia discussione. L'ho fatto pensando al fatto che fosse un problema diverso.
Comunque stavo pensando anche io ad analizzare la stringa punto per punto. Ma con PHP posso fare anche l'analisi del file carattere per carattere? Come con il C?
Diciamo che messa così il problema sarebbe:
stringa=get_contents(file)
start=id del DIV
posizione=CercaStart(stringa, start)
index=posizione
WHILE stringa[index]!= "Carattere '>' del tag DIV"
index++
CancellaTutto da Index a stringa '</DIV>'
InserisciNuovo da Index

Ovviamente questo comporta anche lo shift di tutto quello che c'è dopo.... che casino ragazzi!
Strano che PHP non abbia funzioni per sostituire ciò che è all'interno di un DIV...
 
Ragazzi ho trovato questo codice:

<div id="tuodiv">
Ho comprato un capitello
</div>

<a href="#" onclick="document.getElementById('tuodiv').innerHTML = 'ho mangiato dei petardi';">
cambia
</a>

che però è javascript che alla pressione di un pulsante modifica l'HTML.. solo che mi chiedo se le modifiche saranno persistenti nel file...
Se tipo dopo aver fatto questo carico il file con php e lo salvo?
 
ciao
considerato che js lavora lato client penso che tu abbia dei problemi, soprattutto se il "cambio" lo fa un utente qualsiasi, perche anche se salvasse il suo file non può certo caricarlo sul sever. tra l'altro mi sembrerebbe, ma può darsi che sbagli, che far fare una cosa ad un utente possa essere estremante pericolosa
 
Si lo so che è una cosa pericolosa...
L'utente si collegherebbe tramite user-id e password e solo ad alcuni utenti sarebbe permessa la modifica. Un pò come avere l'accesso a un pannello di controllo di un cms...
Solo che il file da modificare dovrebbe essere un php e ciò che è da modificare è scritto in questo file (e non memorizzato in un database). Dunque l'unica soluzione è modificare il file php.
Ho molti dubbi sulla sicurezza di questa operazione, non lo nego, ma dovrei farla così.
 
Non è bellissimo cone codice ma dovrebbe funzionare, magari adattalo alle tue esigenze:

PHP:
<?php
	// Stringa iniziale da ricercare
	$string_to_find_start = htmlentities('<div id="id_name">');

	// Stringa finale da ricercare
	$string_to_find_end = '</div>';

	// Stringa da sostituire
	$string_to_replace = 'new_string';

	// Nome del file PHP in cui effettuare la ricerca e la sostituzione
	$php_page_to_modify = "php_page_to_modify.php";
	
	$content = file_get_contents($php_page_to_modify);
	
	$start = strpos($content, $string_to_find_start);
	$start += strlen($string_to_find_start) + 3;
	$end = strpos($content, $string_to_find_end, $start);
	$len = $end - $start;
	$content = substr_replace($content, $string_to_replace, $start, $len);
	
	$fp = fopen($php_page_to_modify, 'w');
	fwrite($fp, $content);
	fclose($fp);
	
	require($php_page_to_modify);
?>
 
ciao
ho traovato questo sul manuale, guarda se ti può servire
http://it.php.net/manual/en/function.preg-replace.php

PHP:
<?php
$string = 'ne mezzo di camin di nostra vita mi ritrovai per una selva oscura';
echo $string."<br>";
$patterns = array();
$patterns[0] = '/mezzo/';
$patterns[1] = '/nostra/';
$patterns[2] = '/per una/';
$replacements = array();
$replacements[2] = 'tre quarti';
$replacements[1] = 'vostra';
$replacements[0] = 'due selve di cui una';
echo preg_replace($patterns, $replacements, $string);
?>
 

Discussioni simili