Foro de elhacker.net

Programación => PHP => Mensaje iniciado por: Draco Heroicus en 25 Enero 2007, 23:22 pm



Título: Ayuda: Analiza texto con PHP
Publicado por: Draco Heroicus en 25 Enero 2007, 23:22 pm
 :huh: Hola me he quedado seco de ideas en esto.

Estoy tratando de hacer un analizador de texto con PHP.

Estoy usando los siguientes operadores (como en el google).

" " (Operador de mayor jerarquia)

&&, + , || (De segunda jerarquia)

El problema es que no consigo hacer que...

1) Obtener las cadenas encerradas en " ", o las que estas despues de unas doble comillas si cerrar.

2) y con los demas operandos no he podido hacer nada ya que por ser las dobles comillas de mayor jerarquia, no he trabajado con los demas operadores.

Código:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
<title>Documento sin t&iacute;tulo</title>
</head>

<body>
<form id="form1" name="form1" method="post" action="">
  <input name="criterio" type="text" id="criterio" />
  <input type="submit" name="Submit" value="Enviar" />
</form>
<?php
$criterio=$_POST["criterio"];

//Operador de primer Orden
$Op1='"';
//Operadores de 2do orden.
$and='&&';
$and2='+';
$or='||';

$Op_count=0;
$Op_cerrado="nada";

$temp_cadena="";

$trim_cadena=trim($criterio); //sin espacios al principio o final.
$longitud=strlen($trim_cadena); //Longitud de la cadena.
$lower_cadena=strtolower($trim_cadena); //Convierte a minusculas.

$chunk=chunk_split($lower_cadena,1,'-'); //Divide en 1 caracter
$split=split("-",$chunk);

$Op1_count=substr_count($lower_cadena,$Op1); //Las veces que aparece "
$and_count=substr_count($lower_cadena,$and); //LAs veces que aparece &&
$and2_count=substr_count($lower_cadena,$and2); //Las veces que aparece +
$or_count=substr_count($lower_cadena,$or); //Las veces que aparece ||

for($i=0;$i<strlen($split);$i++){
$restantes=$longitud-$i;
if($split[$i]==$Op1){
$Op_count++;
if($Op_cerrado!="no"){
$Op_cerrado="no";
}else{
$Op_cerrado="si";
}
}else{
$temp_cadena=$temp_cadena.$split[$i];
if($split[$i++]==$Op1 && $Opc_cerrado=="no"){
$Op_array[]=$temp_cadena;
}elseif($Op_cerrado=="si" && $split[$i++]==$Op1){
$NoOp_array[]=$temp_cadena;
}elseif($restantes==0){
$NoOp_array[]=$temp_cadena;
}
}
}

?>
</body>
</html>


Título: Re: Ayuda: Analiza texto con PHP
Publicado por: дٳŦ٭ en 26 Enero 2007, 00:41 am
Pruebas con:

Código:
<?php
addslashes($criterio);
?>

http://www.php.net/manual/es/function.addslashes.php

Necesitas escapar las "".


Título: Re: Ayuda: Analiza texto con PHP
Publicado por: Draco Heroicus en 26 Enero 2007, 02:59 am
 ;D

Es que estoy haciendo un buscador :(, eso no me sirve.

1) "Hola"

Obtener Hola

2) "Hola" maldito "PHP que no funciona :("

Obtener lo de " " y aparte lo que no esta encerrado.

Es que mi codigo es logico, pero no funciona.

Lo hize mas facil que que detecte cuando hay un " y aun asi no funciona, fue algo asi

Código:
<?php
$criterio=$_POST["criterio"];

//Operador de primer Orden
$Op1='"';
//Operadores de 2do orden.
$and='&&';
$and2='+';
$or='||';

$split_count=0;

$trim_cadena=trim($criterio); //sin espacios al principio o final.
$longitud=strlen($trim_cadena); //Longitud de la cadena.
$lower_cadena=strtolower($trim_cadena); //Convierte a minusculas.

$chunk=chunk_split($lower_cadena,1,'-'); //Divide en 1 caracter
$split=split("-",$chunk);

$Op1_count=substr_count($lower_cadena,$Op1); //Las veces que aparece "
$and_count=substr_count($lower_cadena,$and); //LAs veces que aparece &&
$and2_count=substr_count($lower_cadena,$and2); //Las veces que aparece +
$or_count=substr_count($lower_cadena,$or); //Las veces que aparece ||

while(!empty($split)){
if($split[$split_count]==Op1){
echo "xD";
}
$split_count++;
}

?>


Título: Re: Ayuda: Analiza texto con PHP
Publicado por: alatul en 10 Abril 2007, 03:05 am
Este es mi primer post y tampoco llevo mucho tiempo con este lenguaje pero yo tiraría por donde te ha indicado Ing_Amc. Si no te sirve la función addslashes puedes a la hora de recoger la cadena intentar sustituir los caracteres " por otros que tu quieras, como por ejemplo ··|· o cualquier "cadena" de caracteres que no se vayan a dar por su rareza.

Espero te sirva.


Título: Re: Ayuda: Analiza texto con PHP
Publicado por: Ertai en 10 Abril 2007, 18:03 pm
Hola,

Yo probaría con usar la funcion explode:

Código:
<?php
// Example 1
$pizza  = "piece1 piece2 piece3 piece4 piece5 piece6";
$pieces = explode(" ", $pizza);
echo $pieces[0]; // piece1
echo $pieces[1]; // piece2
?>

Esto te servirá almenos para separar las cadenas. Luego, con strpos (http://es2.php.net/manual/en/function.strpos.php), puedes saber que partes del array de explode estaban entre comillas.

Es el metodo mas rápido, aunque seguro que hay muchisimos mejores, como encontrar con strpos la posicion de la comilla y ese resultado + 1, empiezas a buscar la siguiente comilla. Luego cortas la cadena entre ambos resultados.

Saludos!


Título: Re: Ayuda: Analiza texto con PHP
Publicado por: [ Alberto] en 10 Abril 2007, 19:06 pm
hola prueba con la funcionó MATCH...AGAINST con esto puedes lograr algo como los buscadores... además es mas rapida que otros métodos de consulta

http://dev.mysql.com/doc/refman/5.0/en/fulltext-search.html
http://www.desarrolloweb.com/articulos/2087.php
http://www.programacion.net/articulo/adr_buscador/