preg_replace
Chilion - 26/11/2009 10:34
MySQL interesse
Beste dames/heren,
Ik ben nu eigenlijk bij elkaar al gewoon een dag aan het zoeken, en heb ook flink wat gevonden.
Het probleem is, ik kom een eind, maar daar loop ik vast.
Wat ik wil is dat alle textarea attributen uit een bepaalde input string ($_POST)
Automatisch eruit gesloopt worden.
Nu heb ik deze code, krijg ik geen foutmeldingen, maar werkt het ook nog niet helemaal.
$input = preg_replace('#\<textarea(.*?)>#', ' ', $_POST['pagina']);
$input = preg_replace ( '#\<textarea(.*?)>#' , ' ' , $_POST [ 'pagina' ] ) ;
Ook heb ik de volgende code al (tevergeefs) gebruikt en geprobeerd.
$input = preg_replace('/<textarea[^>]+>/', 'A' ,$_POST['pagina']);
$input = preg_replace ( '/<textarea[^>]+>/' , 'A' , $_POST [ 'pagina' ] ) ;
Let op, de output komt vanaf CKEDITOR
15 antwoorden
Gesponsorde links
ArieMedia - 26/11/2009 10:44
PHP ver gevorderde
Hmm probeer eens:
$input = preg_match($input, '#\<textarea (.*)\>#', $aMatches);
echo '<pre>'.print_r($aMatches, 1).'</pre>';
$input = preg_match ( $input , '#\<textarea (.*)\>#' , $aMatches ) ;
Chilion - 26/11/2009 10:50 (laatste wijziging 26/11/2009 10:53)
MySQL interesse
Kheb die van jou precies gekopieerd. Komt dit uit:
Citaat:
Warning: preg_match() [function.preg-match]: Empty regular expression in /vhosts/www/www.stockl18.nl/beheer/index.php on line 46
Wanneer ik er dit van maak:
$input = preg_match($_POST['pagina'], '#\<textarea (.*)\>#', $aMatches);
echo '<pre>'.print_r($aMatches, 1).'</pre>';
$input = preg_match ( $_POST [ 'pagina' ] , '#\<textarea (.*)\>#' , $aMatches ) ;
Krijg ik dit:
Citaat:
Warning: preg_match() [function.preg-match]: Unknown modifier ' ' in /vhosts/www/www.stockl18.nl/beheer/index.php on line 46
ArieMedia - 26/11/2009 10:59
PHP ver gevorderde
Dom.. volgorde verkeerd..
$input = '<textarea name="test" ></textarea>';
$input = preg_match('#\<textarea (.*)[[:space:]]?\>#', $input, $aMatches);
echo '<pre>'.print_r($aMatches, 1).'</pre>';
$input = '<textarea name="test" ></textarea>' ;
$input = preg_match ( '#\<textarea (.*)[[:space:]]?\>#' , $input , $aMatches ) ;
Chilion - 26/11/2009 11:38
MySQL interesse
Ik krijg dit er nu uit:
Array
(
[0] =>
[1] => name="test" >
En bij 0 staat dan een textarea
ArieMedia - 26/11/2009 11:43
PHP ver gevorderde
Chilion schreef:
Ik krijg dit er nu uit:
Array
(
[0] =>
[1] => name="test" >
En bij 0 staat dan een textarea
klopt.. de preg_match werkt niet helemaal lekker.. Maar heb er nu even geen tijd voor om het goed werkend te maken (omdat ik hier dan wel wat langer mee bezig ben dan 5 minuten xD). Als je geluk hebt komt Richard langs, dat is de heer des Regexes
reguliere expressies <-- Mooi voorbeeld, misschien kan je zelf een beetje spelen.
Richard - 26/11/2009 12:51
Crew algemeen
Eh, wat wil je precies? De attributen van een textarea element *allemaal* weghalen?
$output = preg_replace('{(<textarea)[^>]*(>)}i', '$1$2', $input);
$output = preg_replace ( '{(<textarea)[^>]*(>)}i' , '$1$2' , $input ) ;
Chilion - 26/11/2009 13:40
MySQL interesse
Ik wil de hele textarea tag weghalen, ongeacht van wat erin staat. Kom met jou ding nog niet verder, wel alvast bedankt!
Richard - 26/11/2009 13:41
Crew algemeen
Dan had je duidelijker moeten zijn...
Citaat:
Wat ik wil is dat alle textarea attributen uit een bepaalde input string ($_POST)
Automatisch eruit gesloopt worden.
Attributen dus...
Maar, wil je dan ook de content weghalen?
Richard - 26/11/2009 13:51
Crew algemeen
Ahaaaa :-)
'{<textarea[^>]*>(?:[^<]++|<(?!/textarea>)[^<]++)*+</textarea>}i'
'{<textarea[^>]*>(?:[^<]++|<(?!/textarea>)[^<]++)*+</textarea>}i'
ArieMedia - 26/11/2009 13:54
PHP ver gevorderde
Richard schreef:
Ahaaaa :-)
[..code..]
Ik snap nogsteeds niet hoe je het flikt
Chilion - 26/11/2009 13:58 (laatste wijziging 26/11/2009 13:59)
MySQL interesse
Ik snap ook niet hoe je het doet, tprobleem is denk ik ook een beetje dat het nog niet werkt
Hij staat in deze code:
if (isset($_POST['pagina']) && !empty($_POST['pagina']))
{
//$input = preg_replace('/<textarea[^>]+>/', 'A' ,$_POST['pagina']);
//$input = preg_replace('#\<textarea(.*?)>#', 'AA', $_POST['pagina']);
$input = preg_replace('{<textarea[^>]*>(?:[^<]++|<(?!/textarea>)[^<]++)*+</textarea>}i', '', $_POST['pagina']);
$page = (isset($_GET['page']) ? $_GET['page'] : 1);
//echo $input;
$sql_update = '
UPDATE
pagina
SET
content = "'.$input.'"
WHERE
id = '.$page;
mysqli_query($link, $sql_update);
}
if ( isset ( $_POST [ 'pagina' ] ) && ! empty ( $_POST [ 'pagina' ] ) ) {
//$input = preg_replace('/<textarea[^>]+>/', 'A' ,$_POST['pagina']);
//$input = preg_replace('#\<textarea(.*?)>#', 'AA', $_POST['pagina']);
$input = preg_replace ( '{<textarea[^>]*>(?:[^<]++|<(?!/textarea>)[^<]++)*+</textarea>}i' , '' , $_POST [ 'pagina' ] ) ;
$page = ( isset ( $_GET [ 'page' ] ) ?
$_GET [ 'page' ] : 1 ) ;
//echo $input;
$sql_update = '
UPDATE
pagina
SET
content = "' . $input . '"
WHERE
id = ' . $page ;
mysqli_query( $link , $sql_update ) ;
}
En als ik wat invoer in mijn CKEditor en dan opsla blijft het bestaan helaas
Richard - 26/11/2009 14:01 (laatste wijziging 26/11/2009 14:02)
Crew algemeen
Je code wat opschonen kan *echt* geen kwaad, dit is onleesbaar...
<?php
if (isset($_POST['pagina']) && !empty($_POST['pagina'])) {
$input = preg_replace('{<textarea[^>]*>(?:[^<]++|<(?!/textarea>)[^<]++)*+</textarea>}i', '', $_POST['pagina']);
$page = isset($_GET['page']) ? $_GET['page'] : 1;
$sql_update = "
UPDATE pagina
SET content = '" . mysqli_real_escape_string($link, $input) . "'
WHERE id = '" . mysql_real_escape_string($link, $page) . "'
";
mysqli_query($link, $sql_update);
}
<?php
if ( isset ( $_POST [ 'pagina' ] ) && ! empty ( $_POST [ 'pagina' ] ) ) { $input = preg_replace ( '{<textarea[^>]*>(?:[^<]++|<(?!/textarea>)[^<]++)*+</textarea>}i' , '' , $_POST [ 'pagina' ] ) ;
$page = isset ( $_GET [ 'page' ] ) ?
$_GET [ 'page' ] : 1 ;
$sql_update = "
UPDATE pagina
SET content = '" . mysqli_real_escape_string( $link , $input ) . "'
" ;
mysqli_query( $link , $sql_update ) ;
}
Chilion - 26/11/2009 14:09 (laatste wijziging 26/11/2009 14:10)
MySQL interesse
Ay, wanneer ik nu naar mijn output kijk zie ik een verschil.
ipv < staat er nu de HTML code daarvoor <
Die moet hij ook weg halen, omdat entity_decode gebruikt wordt bij het ophalen.
Kan ik dat in jou voorbeeld gewoon gebruiken?
Ik probeerde dat zo namelijk:
$input = preg_replace('{<textarea[^>]*>(?:[^<]++|<(?!/textarea>)[^<]++)*+</textarea>}i', '', $_POST['pagina']);
$input = preg_replace ( '{<textarea[^>]*>(?:[^<]++|<(?!/textarea>)[^<]++)*+</textarea>}i' , '' , $_POST [ 'pagina' ] ) ;
Maar dat werkt niets uit.
Gesponsorde links
Dit onderwerp is gesloten .