You can also use the strpos
function to check if a string is found in a text.
<form method="post" action="#">
<textarea name="texto" rows="4" cols="40">Lorem impsun [galeria] Lorem impsun</textarea>
<input type="submit" name="submit" value="Enviar" id="submit"/>
</form>
<?php
$valorTextarea = isset($_POST['texto']) ? $_POST['texto'] : "";
if (strpos($valorTextarea, "[galeria]") !== false){
FuncaoGaleria();
} else {
echo "Palavra-chave não encontrada!\n";
}
function FuncaoGaleria(){
echo "Função Galeria!\n";
}
?>
Editing
To extract more than one keyword from the text, use the following function:
function extrairPalavras($texto, $sepInicial, $sepFinal){
$resultado = [];
$contador = $inicio = $final = 0;
while ($contador < strlen($texto)){
$posIn = strpos($texto, $sepInicial, $inicio);
$posFn = strpos($texto, $sepFinal, $final);
if ($posIn !== false){
$inicio = $posIn + 1;
if ($posFn !== false){
$final = $posFn + 1;
$resultado[$inicio] = $final;
}
}
$contador++;
}
return $resultado;
}
Use this:
function funcao1() {
return '<Funcao galeria 1>';
}
function funcao2() {
return '<Funcao galeria 2>';
}
$texto = "Lorem [funcao2] impsun [funcao1] Lorem [heya] impsun";
$indices = extrairPalavras($texto, '[', ']');
foreach($indices as $inicial => $final){
$nomeFunc = substr($texto, $inicial, $final - $inicial - 1);
if(function_exists($nomeFunc)) {
if (!isset($textoResultado)){
$textoResultado = str_replace("[$nomeFunc]", $nomeFunc(), $texto);
continue;
}
$textoResultado = str_replace("[$nomeFunc]", $nomeFunc(), $textoResultado);
}
}
echo $textoResultado . "\n";
// Lorem <Funcao galeria 2> impsun <Funcao galeria 1> Lorem [heya] impsun
View demonstração