Hola:
En mi sistema web tengo varios TAGS BBCode disponibles, pero me gustaria poner a disposicion un TAGS BBCode de Youtube, para que los usuarios puedan postear el video de youtube y se vea ahi mismo en la pagina. Espero y me puedan ayudar !!!
Mientras, les platicare mi metodo para crear BBCode:
Primeramente, cualquier mensaje que se agrege ya sea por mi o tipo comentario pasa por una funcion llamada proteger_cadena(), esta protege la cadena para evitar Injeccion HTML, Injeccion SCRIPT e Injeccion SQL, despues esta misma funcion realiza el llamado de otra funcion que es msg2msgtags($cadena) que se encarga de hacer el BBCode. El codigo es el siguiente:
Funcion msg2msgtags()
<?php
function msg2msgtags( $mensaje )
{
if( strchr( $mensaje, "[b]" ) && strchr( $mensaje, "[/b]" ) )
{
$mensaje= str_replace( "[b]", "<b>", $mensaje );
$mensaje= str_replace( "[/b]", "</b>", $mensaje );
}
if( strchr( $mensaje, "[i]" ) && strchr( $mensaje, "[/i]" ) )
{
$mensaje= str_replace( "[i]", "<i>", $mensaje );
$mensaje= str_replace( "[/i]", "</i>", $mensaje );
}
if( strchr( $mensaje, "[u]" ) && strchr( $mensaje, "[/u]" ) )
{
$mensaje= str_replace( "[u]", "<u>", $mensaje );
$mensaje= str_replace( "[/u]", "</u>", $mensaje );
}
if( strchr( $mensaje, "[center]" ) && strchr( $mensaje, "[/center]" ) )
{
$mensaje= str_replace( "[center]", "<center>", $mensaje );
$mensaje= str_replace( "[/center]", "</center>", $mensaje );
}
if( strchr( $mensaje, "[img]" ) && strchr( $mensaje, "[/img]" ) )
{
$mensaje= str_replace( "[img]", "<img class=\"img_post\" src=\"", $mensaje );
$mensaje= str_replace( "[/img]", "\">", $mensaje );
}
//OJO, los '\' solo los puse para que salieran en este POST, ya que si quito los '\'
//el codigo sale CORTADO en este post...
if( strchr( $mensaje, "\[code\]" ) || strchr( $mensaje, "\[/code\]" ) )
{
$mensaje= str_replace( "\[code\]", "<div id=\"etiqueta_code\">", $mensaje );
$mensaje= str_replace( "\[/code\]", "</div>", $mensaje );
}
//<object width="425" height="344">
//<param name="movie" value="http://www.youtube.com/v/Iur_NBn6b2k&hl=en&fs=1"></param>
//<param name="allowFullScreen" value="true"></param>
//<embed src="http://www.youtube.com/v/Iur_NBn6b2k&hl=en&fs=1" type="application/x-shockwave-flash" allowfullscreen="true" width="425" height="344"></embed>
//</object>
/*if( strchr( $mensaje, "[youtube]" ) || strchr( $mensaje, "[/youtube]" ) )
{
$mensaje= str_replace( "[youtube]", "", $mensaje );
$mensaje= str_replace( "[/youtube]", "", $mensaje );
}*/
if( strchr( $mensaje, "\n" ) )
{
$mensaje= str_replace( "\n", "<br>", $mensaje );
}
if( strchr( $mensaje, "\t" ) )
{
$mensaje= str_replace( "\t", " ", $mensaje );
}
if( strchr( $mensaje, "<script>" ) )
{
$mensaje= str_replace( "<script>", htmlentities( "<script>", ENT_QUOTES ), $mensaje );
}
if( strchr( $mensaje, "</script>" ) )
{
$mensaje= str_replace( "</script>", htmlentities( "</script>", ENT_QUOTES ), $mensaje );
}
return $mensaje;
}
?>
Funcion proteger_cadena()
<?php
function proteger_cadena( $cadena )
{
$out=$cadena;
if( strchr( $out, "<" ) ) //con esto vitamos injeccion de codigo
$out= str_replace( "<", htmlentities("<", ENT_QUOTES), $out );
if( strchr( $out, ">" ) ) //con esto vitamos injeccion de codigo
$out= str_replace( ">", htmlentities(">", ENT_QUOTES), $out );
$out= msg2msgtags($out);
return $out;
}
?>
Codigo de Ejemplo, antes de que el mensaje de guarde en la base de datos:
<?php
$msg= proteger_cadena($_POST["mensaje_noticia"]);
//generamos array de insercion mysql
$valores= array(
"autor"=>"'". $_SESSION["log_usr"]. "'",
"titulo"=>"'". htmlentities($_POST["titulo_noticia"], ENT_QUOTES). "'",
"mensaje"=>"'". htmlentities($msg, ENT_QUOTES). "'",
"fecha"=>"'". time(). "'",
"menu"=>"'". htmlentities($buf_menu["NOMBRE"], ENT_QUOTES). "'",
"sección"=>"'". htmlentities($buf_sec["NOMBRE"], ENT_QUOTES). "'" );
unset($msg);
if( insertar_bdd( "NOTICIAS", $valores )==0 )
echo "Error en la Insercion de los Datos.";
else
echo "Datos Agregados con Exito.";
?>
Sera que no me he explicado bien o que onda ??, vaya, lo que trato de hacer es algo exatamente igual a como si pusieramos un video youtube pero usando BBCode... Si se fijan un poquito, al contestar o poner un POST, aparece un icono con el logotipo de YOUTUBE y pone algo asi:
\[youtube=425,350\]\[/youtube\]
En fin, no es dificil poner eso, sino, como interpretarlo para que quede listo y visible el video ??
bye bye
pues... copia el embed de youtube y haces que la url que coloque entre las tags las ponga en
src="aqui"
vamos.. no es dificil si ha hiciste una para img es prácticamente lo mismo ;)
Cita de: Nakp en 31 Julio 2008, 07:42 AM
pues... copia el embed de youtube y haces que la url que coloque entre las tags las ponga en
src="aqui"
vamos.. no es dificil si ha hiciste una para img es prácticamente lo mismo ;)
Me pregunto: "has echo lo que yo pregunto ?"... Ya que si fuera asi de simple, no estuviera preguntando :S daaaa
Por favor si no van a colaborar mejor evitense la pena y peresa de escribir :S !!
bye bye
Estoy usando esto actualmente para mi BBCode ;)
function BBcode($str) {
$simple_search = array(
'/\[b\](.*?)\[\/b\]/is',
'/\[i\](.*?)\[\/i\]/is',
'/\[u\](.*?)\[\/u\]/is',
'/\[s\](.*?)\[\/s\]/is',
'/\[url\=(.*?)\](.*?)\[\/url\]/is',
'/\[url\](.*?)\[\/url\]/is',
'/\[align\=(left|center|right|justify)\](.*?)\[\/align\=(left|center|right|justify)\]/is',
'/\[img\](.*?)\[\/img\]/is',
'/\[font\=(.*?)\](.*?)\[\/font\]/is',
'/\[size\=(.*?)\](.*?)\[\/size\]/is',
'/\[color\=(.*?)\](.*?)\[\/color\]/is',
'/\[code\](.*?)\[\/code\]/is',
'/\[quote\](.*?)\[\/quote\]/is',
'/\[youtube](.*?)\[\/youtube\]/is',
);
$simple_replace = array(
'<strong>$1</strong>',
'<em>$1</em>',
'<u>$1</u>',
'<strike>$1</strike>',
'<a href="$1">$2</a>',
'<a href="$1">$1</a>',
'<div style="text-align:$1;">$2</div>',
'<img src="$1" />',
'<span style="font-family:$1;">$2</span>',
'<span style="font-size:$1;">$2</span>',
'<span style="color: $1;">$2</span>',
'<span id="code">$1</div>',
'<span id="quote">$1</div>',
'<span style="display:block;"><object width="350" height="275"><param name="movie" value="http://www.youtube.com/v/$1"></param><param name="wmode" value="transparent"></param><embed src="http://www.youtube.com/v/$1" type="application/x-shockwave-flash" wmode="transparent" width="350" height="275"></embed></object></span>',
);
$str = htmlentities($str);
$str = preg_replace ($simple_search, $simple_replace, $str);
$str = nl2br($str);
$str = str_replace("<br />","",$str);
return $str;
}
Y me funciona sin problemas ;)
Aca te hago uno para tu youtube ;) A mi tambien me hace falta asi que no tengo perdida :xD
//Esto lo agregas en el primer arrray:
'/\[youtube](.*?)\[\/youtube\]/is',
//Esto en el segundo array:
'<span style="display:block;"><object width="350" height="275"><param name="movie" value="http://www.youtube.com/v/$1"></param><param name="wmode" value="transparent"></param><embed src="http://www.youtube.com/v/$1" type="application/x-shockwave-flash" wmode="transparent" width="350" height="275"></embed></object></span>',
Me avisas si te funciona ;)
Se usa como
;)
Tambien debes agregar esto:
$str = str_replace("<br />","",$str);
Antes del:
return $str;
Me salvaste la vida Freeze, ahorita en un ratito mas cuelgo el codigo resultante :D !!...