Cortar texto con php

Te escribo por que necesito solicitar de tu ayuda. El asunto es que estoy tratando de cortar una cadena de texto sacada de una base de datos.

Y conseguí que funcionara un código que efectivamente corta el texto. La función es esta.

<?php // llamamo al archivo que contiene las funciones
include('funciones.php');
// variables
$TextoLargo='si funciona pero solamente cuando el texto esta escrito aquí. Pero no cuando lo saco de la base de datos';
$TextoCortado=recortar($TextoLargo, 20); // recortamos 20 caracteres
// mostramos el texto cortado
echo $TextoCortado; ?>

Bueno como dice el ejemplo esto realmente corta el texto siempre y cuando el texto este escrito en el campo $TextoLargo=' '

Pero la variable que me saca la información de la base de datos es esta:

<?php echo $row_SacandoNoticias['Publicación']; ?>

Y no se puede poner el código php dentro del campo texto largo. Entonces como lo hago.

1 Respuesta

Respuesta
1

Si haces

echo $row_SacandoNoticias['Publicación'];

Te retorna texto cierto?

y si haces esto que te retorna?

echo recortar($row_SacandoNoticias['Publicación'], 20);

Hola amigo gracias por tu pronta respuesta.

Mira el asunto es que no estoy seguro en que parte debo pegar el echo recortar($row_SacandoNoticias['Publicación'], 20);

por que si lo pego donde dice $TextoLargo=' '; me dice que la variable recortar esta indefinida.

La verdad ami no me importa usar exactamente este código para cortar el texto lo único que requiero es poder cortarlo.
Nunca había hecho esto asique estoy bastante perdidio espero me puedas dar una mano.

Muchas gracias.

Haz esto:

<?php // llamamo al archivo que contiene las funciones
include('funciones.php');
// variables
$TextoCortado=recortar($row_SacandoNoticias['Publicación'], 20) // recortamos 20 caracteres
// mostramos el texto cortado
echo $TextoCortado;?>

Me dices si funciona como deseas

lo pegue como me indicaste pero hay un error en la linea 146. en el navegador se ve esto:

Parse error: syntax error, unexpected 'echo' (T_ECHO) in C:\xampp\htdocs\blog\index.php on line 146

y la linea 146 es esto: echo $TextoCortado; ?>

Cambia esta línea

$TextoCortado=recortar($row_SacandoNoticias['Publicación'], 20) // recortamos 20 caracteres

Por esta

$TextoCortado=recortar($row_SacandoNoticias['Publicación'], 20); // recortamos 20 caracteres

Faltaba ; al final de la sentencia

Claro faltaba el ; En este caso el dreamweaver no me avisa de ningún error. pero cuando lo veo en el navegador donde debería parecer el texto cortado me dice: Notice: Undefined index: Publicación in C:\xampp\htdocs\blog\index.php on line 144

y la linea 144: es precisamente la que acabo de reemplazar $TextoCortado=recortar($row_SacandoNoticias['Publicación'], 20); // recortamos 20 caracteres

y también me da otro error que dice: Fatal error: Cannot redeclare recortar() (previously declared in C:\xampp\htdocs\blog\funciones.php:1) in C:\xampp\htdocs\blog\funciones.php on line 8

tal vez lo mejor sea que te comparta el código web que estoy usando tal vez haya algo que no este del todo bien antes que el texto que pretendo cortar

<?php require_once('Connections/blog.php'); ?>
<?php
if (!function_exists("GetSQLValueString")) {
function GetSQLValueString($theValue, $theType, $theDefinedValue = "", $theNotDefinedValue = "") 
{
 if (PHP_VERSION < 6) {
 $theValue = get_magic_quotes_gpc() ? stripslashes($theValue) : $theValue;
 }
 $theValue = function_exists("mysql_real_escape_string") ? mysql_real_escape_string($theValue) : mysql_escape_string($theValue);
 switch ($theType) {
 case "text":
 $theValue = ($theValue != "") ? "'" . $theValue . "'" : "NULL";
 break; 
 case "long":
 case "int":
 $theValue = ($theValue != "") ? intval($theValue) : "NULL";
 break;
 case "double":
 $theValue = ($theValue != "") ? doubleval($theValue) : "NULL";
 break;
 case "date":
 $theValue = ($theValue != "") ? "'" . $theValue . "'" : "NULL";
 break;
 case "defined":
 $theValue = ($theValue != "") ? $theDefinedValue : $theNotDefinedValue;
 break;
 }
 return $theValue;
}
}
$currentPage = $_SERVER["PHP_SELF"];
$maxRows_SacandoNoticias = 6;
$pageNum_SacandoNoticias = 0;
if (isset($_GET['pageNum_SacandoNoticias'])) {
 $pageNum_SacandoNoticias = $_GET['pageNum_SacandoNoticias'];
}
$startRow_SacandoNoticias = $pageNum_SacandoNoticias * $maxRows_SacandoNoticias;
mysql_select_db($database_blog, $blog);
$query_SacandoNoticias = "SELECT * FROM publicaciones ORDER BY publicaciones.idPublicacion DESC";
$query_limit_SacandoNoticias = sprintf("%s LIMIT %d, %d", $query_SacandoNoticias, $startRow_SacandoNoticias, $maxRows_SacandoNoticias);
$SacandoNoticias = mysql_query($query_limit_SacandoNoticias, $blog) or die(mysql_error());
$row_SacandoNoticias = mysql_fetch_assoc($SacandoNoticias);
if (isset($_GET['totalRows_SacandoNoticias'])) {
 $totalRows_SacandoNoticias = $_GET['totalRows_SacandoNoticias'];
} else {
 $all_SacandoNoticias = mysql_query($query_SacandoNoticias);
 $totalRows_SacandoNoticias = mysql_num_rows($all_SacandoNoticias);
}
$totalPages_SacandoNoticias = ceil($totalRows_SacandoNoticias/$maxRows_SacandoNoticias)-1;
$queryString_SacandoNoticias = "";
if (!empty($_SERVER['QUERY_STRING'])) {
 $params = explode("&", $_SERVER['QUERY_STRING']);
 $newParams = array();
 foreach ($params as $param) {
 if (stristr($param, "pageNum_SacandoNoticias") == false && 
 stristr($param, "totalRows_SacandoNoticias") == false) {
 array_push($newParams, $param);
 }
 }
 if (count($newParams) != 0) {
 $queryString_SacandoNoticias = "&" . htmlentities(implode("&", $newParams));
 }
}
$queryString_SacandoNoticias = sprintf("&totalRows_SacandoNoticias=%d%s", $totalRows_SacandoNoticias, $queryString_SacandoNoticias);
?>
<!DOCTYPE html>
<!--[if lt IE 7]> <html class="no-js lt-ie9 lt-ie8 lt-ie7"> <![endif]-->
<!--[if IE 7]> <html class="no-js lt-ie9 lt-ie8"> <![endif]-->
<!--[if IE 8]> <html class="no-js lt-ie9"> <![endif]-->
<!--[if gt IE 8]><!--> <html class="no-js"> <!--<![endif]-->
 <head>
 <meta charset="utf-8">
 <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
 <title>Titulo</title>
 <meta name="description" content="Descripcion del sitio web">
 <meta name="viewport" content="width=device-width">
 <link rel="stylesheet" href="css/bootstrap.min.css">
 <link rel="stylesheet" href="css/personalizado.css">
 <link rel="stylesheet" href="css/normalize.min.css">
 <meta name="robots" content="index, follow" />
 <link rel="icon" type="image/png" href="img/favicon.png" />
 <script src="js/vendor/modernizr-2.6.2.min.js"></script>
 <script type="text/javascript">
function MM_preloadImages() { //v3.0
 var d=document; if(d.images){ if(!d.MM_p) d.MM_p=new Array();
 var i,j=d.MM_p.length,a=MM_preloadImages.arguments; for(i=0; i<a.length; i++)
 if (a.indexOf("#")!=0){ d.MM_p[j]=new Image; d.MM_p[j++].src=a;}}
}
function MM_swapImgRestore() { //v3.0
 var i,x,a=document.MM_sr; for(i=0;a&&i<a.length&&(x=a)&&x.oSrc;i++) x.src=x.oSrc;
}
function MM_findObj(n, d) { //v4.01
 var p,i,x; if(!d) d=document; if((p=n.indexOf("?"))>0&&parent.frames.length) {
 d=parent.frames[n.substring(p+1)].document; n=n.substring(0,p);}
 if(!(x=d[n])&&d.all) x=d.all[n]; for (i=0;!x&&i<d.forms.length;i++) x=d.forms[n];
 for(i=0;!x&&d.layers&&i<d.layers.length;i++) x=MM_findObj(n,d.layers.document);
 if(!x && d.getElementById) x=d.getElementById(n); return x;
}
function MM_swapImage() { //v3.0
 var i,j=0,x,a=MM_swapImage.arguments; document.MM_sr=new Array; for(i=0;i<(a.length-2);i+=3)
 if ((x=MM_findObj(a))!=null){document.MM_sr[j++]=x; if(!x.oSrc) x.oSrc=x.src; x.src=a[i+2];}
}
 </script>
 </head>
 <body onLoad="MM_preloadImages('img/Facebook-hover.fw.png','img/twiteer-hover.fw.png')">
 <!--[if lt IE 7]>
 <p class="chromeframe">You are using an <strong>outdated</strong> browser. Please <a href="http://browsehappy.com/">upgrade your browser</a> or <a href="http://www.google.com/chromeframe/?redirect=true">activate Google Chrome Frame</a> to improve your experience.</p>
 <![endif]-->
 <!-- Codigo de la pagina web -->
 <!-- Encabezado -->
 <?php include("includes/encabezado-blog.php"); ?>
 <!-- /Encabezado -->
 <!-- Slider -->
 <?php include("includes/carrusel-blog.php"); ?>
 <!-- /Slider -->
 <!-- Categorias celular -->
 <?php include("includes/categoria-celular.php"); ?>
 <!-- Categorias celular -->
 <!-- Panel izquierda -->
 <div class="col-xs-12 col-sm-9 col-md-9 col-lg-9 centro">
 <div class="row-fluid">
 <?php do { ?>
 <div class="col-xs-12 col-sm-4 col-md-4 col-lg-4 centro">
 <div class="thumbnail">
 <img src="img/<?php echo $row_SacandoNoticias['Imagen']; ?>" width="120" height="120" alt="Noticias de actualidad kayserdigital">
 <div class="caption">
 <h3><?php echo $row_SacandoNoticias['Titulo']; ?></h3>
 <p><?php // llamamo al archivo que contiene las funciones
include('funciones.php');
// variables
$TextoCortado=recortar($row_SacandoNoticias['Publicación'], 20); // recortamos 20 caracteres
// mostramos el texto cortado
echo $TextoCortado; ?>
</p>
 <!--Aqui yo sacaria el script para cortar el contenido-->
 <!--Aqui yo sacaria el script para cortar el contenido-->
 <a href="detalle-noticia.php?cat=<?php echo $row_SacandoNoticias['idPublicacion']; ?>" class="btn btn-success" role="button">Leer el articulo</a>
 </p>
 </div>
 </div>
 </div>
 <?php } while ($row_SacandoNoticias = mysql_fetch_assoc($SacandoNoticias)); ?>
 </div>
 </div>
 <!-- Panel izquierda -->
 <!-- Panel de la derecha -->
 <div class="col-xs-12 hidden-xs col-sm-3 col-md-3 col-lg-3 centro">
 <div class="list-group">
 <?php include("includes/sidebar-blog.php"); ?>
 </div>
 </div>
 <!-- Panel de la derecha -->
 <!-- Zona para el paginado -->
 <div class="col-xs-12 col-sm-4 col-md-4 col-lg-4 colorpaginado">
 <?php if ($pageNum_SacandoNoticias > 0) { // Show if not first page ?>
 <a href="<?php printf("%s?pageNum_SacandoNoticias=%d%s", $currentPage, max(0, $pageNum_SacandoNoticias - 1), $queryString_SacandoNoticias); ?>">Página anterior</a>
 <?php } // Show if not first page ?>
 </div>
 <div class="col-xs-12 col-sm-4 col-md-4 col-lg-4 colorpaginado">
 <h3> En el blog hay <?php echo $totalRows_SacandoNoticias ?> Publicaciones </h3>
 </div>
 <div class="col-xs-12 col-sm-4 col-md-4 col-lg-4 colorpaginado">
 <?php if ($pageNum_SacandoNoticias < $totalPages_SacandoNoticias) { // Show if not last page ?>
 <a href="<?php printf("%s?pageNum_SacandoNoticias=%d%s", $currentPage, min($totalPages_SacandoNoticias, $pageNum_SacandoNoticias + 1), $queryString_SacandoNoticias); ?>">Página siguiente</a>
 <?php } // Show if not last page ?>
 </div> 
 <!-- Zona para el paginado -->
 <!-- pie de pagina -->
 <?php include("includes/pie-blog.php"); ?>
 <!-- pie de pagina -->
 <!-- Codigo de la pagina web -->
 <script>window.jQuery || document.write('<script src="js/vendor/jquery-1.10.1.min.js"><\/script>')</script>
 <script src="js/vendor/bootstrap.js"></script>
 <script src="js/main.js"></script>
 </body>
</html> <?php
mysql_free_result($SacandoNoticias);
?>

y la función que llamo desde el include es esta

<?php function recortar($texto, $numero){
 if(strlen($texto) > $numero){
 $texto=substr($texto,0,$numero)."...";
 }else{
 $texto=$texto;
 }
 return $texto;
} ?>

Eso es todo lo que tengo de momento

El primer error dice que cuando cargas el array desde la query y asignas el valor a $row_SacandoNoticias no viene el campo "Publicación" verifica quizá en tu script lo copiaste con mayúscula y acentos (el editor los coloca automáticamente y tienes que modificarlos a lo está tal cual en la base de datos)

El segundo error dice que recortar() lo has declarado dos veces. Verifica eso en tu archivo funciones.php y elimina las declaraciones restantes.

Claro que tenias razón con respecto al primer error. había un acento que no esta en el campo de la base de datos asique se lo quite y empezó a cortar bien.

pero el segundo error la variable recortar que esta declarada dos veces en el archivo funciones no la encuentro.

<?php function recortar($texto, $numero){
if(strlen($texto) > $numero){
$texto=substr($texto,0,$numero)."...";
}else{
$texto=$texto;
}
return $texto;
}
?>

Según yo no esta repetida, pero evidentemente aquí esta el error.

Saludos

No hagas el include dentro del un bucle. Si el bucle se repite hace el include múltiples veces y "redeclaras" las funciones

Coloca esa linea include('funciones.php'); al principio de tu script, así no duplicas contentido


Saludos!

Perfecto amigo tenias razón no me di cuenta que estaba poniendo el includes que llama a la función cortar dentro del do while. Lo puse fuera y corrió de inmediato.

Antes de cerrar y puntuar tu valiosa ayuda. no se si me pudieras dar algún consejo como te diste cuenta estoy haciendo un blog y no se si deba incluir alguna meta etiqueta o algo por el estilo para que no sea tan invisible.
Saludos y muchas gracias

Obviamente si deseas que sea ubicable y categorizable por los buscadores, tienes que hacer varias cosas una de esas es el uso de meta tags (por lo menos de descripción y palabras clave para cada página) y tener un diseño html bien estructurado

Averigua sobre SEO para posicionamiento web.

Añade tu respuesta

Haz clic para o
El autor de la pregunta ya no la sigue por lo que es posible que no reciba tu respuesta.

Más respuestas relacionadas