Foros del Web » Programando para Internet » PHP »

Duda con bbcode

Estas en el tema de Duda con bbcode en el foro de PHP en Foros del Web. Que tal amigos, estube creando un script para parsear el bbcode pero encontre un gran problemita..... Al revisar la DB, este no guarda el codigo ...
  #1 (permalink)  
Antiguo 17/05/2010, 18:34
Avatar de HiToGoRoShi  
Fecha de Ingreso: abril-2008
Mensajes: 849
Antigüedad: 16 años
Puntos: 31
Duda con bbcode

Que tal amigos, estube creando un script para parsear el bbcode pero encontre un gran problemita.....

Al revisar la DB, este no guarda el codigo bb como todos conocemos...

Código:
En negrilla 
Sino que lo guarda asi:

Código:
[b:9zdt53lh]En negrilla[/b:9zdt53lh]
Y pues e notado que numero extra al costado del bbcode, no es igual para todos, cada uno de esos como que tienen un identificador en cada post del foro.

Ahora mi duda es esta, que demonios son esos numeros xD o como haria para remplazar todo lo que este entre [b hasta ], asi chapa tambien el numero...

Este es mi script original, el cual funciona pero no como lo pense ¬¬ porque no me di cuenta de ese detalle

Código PHP:
Ver original
  1. function parserTexto($str)
  2.         {
  3.             //Negrilla
  4.             $this->b = str_replace('[b]','<b>',$str);
  5.             $this->bf = str_replace('[/b]','</b>',$this->b);
  6.             //Cursiva
  7.             $this->k = str_replace('[k]','<i>',$this->bf);
  8.             $this->kf = str_replace('[/k]','</i>',$this->k);
  9.             //Subrayado
  10.             $this->u = str_replace('[u]','<u>',$this->kf);
  11.             $this->uf = str_replace('[/u]','</u>',$this->u);
  12.             //Centrar
  13.             $this->ce = str_replace('[center]','<center>',$this->uf);
  14.             $this->cef = str_replace('[/center]','</center>',$this->ce);
  15.            
  16.             return $this->cef;
  17.         }
  #2 (permalink)  
Antiguo 17/05/2010, 18:39
Avatar de abimaelrc
Colaborador
 
Fecha de Ingreso: mayo-2009
Ubicación: En el planeta de Puerto Rico
Mensajes: 14.734
Antigüedad: 14 años, 11 meses
Puntos: 1517
Respuesta: Duda con bbcode

En ese caso vas a tener que usar Expresiones Regulares. Lee este enlace para que puedas lograrlo.
__________________
Verifica antes de preguntar.
Los verdaderos amigos se hieren con la verdad, para no perderlos con la mentira. - Eugenio Maria de Hostos
  #3 (permalink)  
Antiguo 17/05/2010, 18:53
Avatar de HiToGoRoShi  
Fecha de Ingreso: abril-2008
Mensajes: 849
Antigüedad: 16 años
Puntos: 31
sino fuera molestia podrias darme un ejemplo, ya que son bastantes las funciones y me marea... otra cosa que note es que el esos numeros al azar siempre son 8digitos, asi que podria hacerse algo como contando 8 digitos y borrar mmmm aver si alguien me da una mano con ejemplo sencillo no mas..

Dew

Que tal colegas, miren

Código PHP:
Ver original
  1. $msg = "[b:12345678]Los lindos pinguinos de madagscar";
  2. print substr($msg,3,8);[/B]

Y la funcion va a imprimir 12345678, yo quiero hacer lo inverso

En ves de imprimir 12346578

Quiero que imprimar asi no mas

Código PHP:
Ver original
  1. $msg = "[b]Los lindos pinguinos de madagscar";
  2. print substr($msg,3,8);[/B]

Sin los numeros....

NOTA: no uso str_replace por que ese numero es generado al azar, pero siempre con 8 digitos, mi pregunta es esta de que manera podria hacer para contar 3 espacios a la derecha y eliminar todo esos numeros, osea lo inverso al substr

Última edición por GatorV; 17/05/2010 a las 20:28
  #4 (permalink)  
Antiguo 17/05/2010, 20:04
 
Fecha de Ingreso: diciembre-2009
Mensajes: 612
Antigüedad: 14 años, 4 meses
Puntos: 16
Respuesta: Lo inverso a substraer ?

$msg = "[b:12345678]Los lindos pinguinos de madagscar";
$numero=substr($msg,3,8);
$msg=explode("$numero",$msg);
echo $msg[0];
echo $msg[1];

¿te sirve? :S
__________________
Tengo una pregunta que a veces me tortura... ¿El loco soy yo o los locos son los demás?
  #5 (permalink)  
Antiguo 17/05/2010, 20:08
Avatar de HiToGoRoShi  
Fecha de Ingreso: abril-2008
Mensajes: 849
Antigüedad: 16 años
Puntos: 31
Respuesta: Lo inverso a substraer ?

genial hermano, has dado un gran progreso a la ciencia :D
  #6 (permalink)  
Antiguo 17/05/2010, 20:23
 
Fecha de Ingreso: diciembre-2009
Mensajes: 612
Antigüedad: 14 años, 4 meses
Puntos: 16
Respuesta: Lo inverso a substraer ?

Tampoco sé mucho, seguro que hay alguna forma más facil...

Suelo complicarme, pero ya sabes, a falta de conocimiento, inteligencia :P
__________________
Tengo una pregunta que a veces me tortura... ¿El loco soy yo o los locos son los demás?
  #7 (permalink)  
Antiguo 17/05/2010, 20:27
Avatar de abimaelrc
Colaborador
 
Fecha de Ingreso: mayo-2009
Ubicación: En el planeta de Puerto Rico
Mensajes: 14.734
Antigüedad: 14 años, 11 meses
Puntos: 1517
Respuesta: Lo inverso a substraer ?

Cita:
Iniciado por millan2525 Ver Mensaje
seguro que hay alguna forma más facil...
Así es, y está mencionado en http://www.forosdelweb.com/f18/duda-...3/#post3406753
__________________
Verifica antes de preguntar.
Los verdaderos amigos se hieren con la verdad, para no perderlos con la mentira. - Eugenio Maria de Hostos
  #8 (permalink)  
Antiguo 17/05/2010, 20:52
Avatar de arthpix  
Fecha de Ingreso: diciembre-2003
Ubicación: Cancún
Mensajes: 2.340
Antigüedad: 20 años, 4 meses
Puntos: 93
Respuesta: Duda con bbcode

pero si ya lo tenías solucionado con substr, perfectamente podías usar str_replace y es más fácil:
Código PHP:
Ver original
  1. $msg = "[b:12345678]Los lindos pinguinos de madagscar";
  2. $salida = str_replace(substr($msg,3,8),'',$msg);
  3. echo $salida; // Imprime: [b:]Los lindos pinguinos de madagscar
__________________
Antes de hacer rabietas infórmate: Linux != Windows
  #9 (permalink)  
Antiguo 17/05/2010, 21:51
Avatar de HiToGoRoShi  
Fecha de Ingreso: abril-2008
Mensajes: 849
Antigüedad: 16 años
Puntos: 31
cierren este post

Que tal amigos, aca estoy haciendo mi parser para bbcode y ahora si estoy en un problemon no se me ocurre como resolver este algoritmo, me dijreon con expresiones irregulares pero la verdad que no entiendo nada...

Aca pueden ver mi parser

http://peruguitar.net/test/includes/...Hito.php?id=10

Ok todo va bien, salvo hasta aca, cuando tenemos
Código HTML:
Ver original
  1. [color="red"] o [color="#fffffff"],

Lo que yo quiero capturar es justo ese valor entre comillas red o #fffff, asi eso lo guardo en una variable y parseo correctamente pero nose me ocurre como hacerlo la verdad.

Última edición por GatorV; 18/05/2010 a las 09:04
  #10 (permalink)  
Antiguo 18/05/2010, 02:57
Avatar de Heli0s  
Fecha de Ingreso: abril-2010
Mensajes: 789
Antigüedad: 14 años
Puntos: 40
Respuesta: Capturar un valor en una cadena

Como te dijeron, se hace con expresiones regulares (No expresiones irregulares como dijiste), debes aprender a usar las expresiones regulares y la funcion preg_replace, o preg_match_all que también serviría usando el parámetro del array.

Manuales
  #11 (permalink)  
Antiguo 18/05/2010, 03:17
 
Fecha de Ingreso: abril-2005
Mensajes: 38
Antigüedad: 19 años
Puntos: 0
Respuesta: Capturar un valor en una cadena

puedes utilizar varias opciones una de ellas seria
Código PHP:
Ver original
  1. $texto='[color="#fffffff"]';
  2. if( eregi('"(.*)"',$texto,$out) ){
  3. echo $out[1];
  4. }else{
  5. echo 'no se encontro nada';
  6. }
  7.  
  8. saludos
  9.  
  10. }

Última edición por w4lck; 18/05/2010 a las 03:17 Razón: mal etiketado
  #12 (permalink)  
Antiguo 18/05/2010, 13:51
Avatar de HiToGoRoShi  
Fecha de Ingreso: abril-2008
Mensajes: 849
Antigüedad: 16 años
Puntos: 31
Respuesta: Duda con bbcode

Gracias por la ayuda colegas, ya pude resolver lo del color pero a medias usando exreg... pero mi duda es esta ahora quisiera ir guardando todo en un array, ya que al encontrar dos veces [color={dato}] bota un error fatal y se loquea, y lo que quiero ir guandado es justo el valor entre llaves {dato}

Este es mi script, funciona perfectamente cuando se tiene un solor [color=""], pero cuando detecta 2 se loquea

Código PHP:
Ver original
  1. //Color
  2.             $this->str = str_replace('[/color]','</font>',$this->str);
  3.             eregi('[[]color=(.*)[]]', $this->str, $out);
  4.             $this->str = str_replace($out[0],"<font color=$out[1]>",$this->str);

Aca pueden ver el ejemplo funcionando correctamente con 1 solo color:

http://peruguitar.net/test/includes/...o.php?id=23753

Y aca con dos colores:

http://peruguitar.net/test/includes/...o.php?id=23754

Última edición por HiToGoRoShi; 18/05/2010 a las 13:58
  #13 (permalink)  
Antiguo 18/05/2010, 14:41
Avatar de spider_boy  
Fecha de Ingreso: diciembre-2003
Ubicación: Chile
Mensajes: 1.855
Antigüedad: 20 años, 4 meses
Puntos: 89
Respuesta: Duda con bbcode

http://php.net/manual/es/function.ereg.php
__________________
Nunca te olvidaré mi negra hermosa. Te extraño demasiado.
  #14 (permalink)  
Antiguo 18/05/2010, 14:47
Avatar de HiToGoRoShi  
Fecha de Ingreso: abril-2008
Mensajes: 849
Antigüedad: 16 años
Puntos: 31
Respuesta: Duda con bbcode

brother el problema es que si funciona, lo que pasa que quiero ir guardando en un array cada ves que detecte esos valores... quien podria ayudarme ?

Etiquetas: bbcode
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 15:54.