Casi todo lo que PHP produce es texto: el HTML de la página es un texto largo. Por eso trabajar con cadenas (string) es lo que más vas a hacer: unir un saludo con un nombre, poner un precio con puntos de miles, limpiar los espacios que dejó un usuario.

Comillas dobles y simples

Las dos crean un texto. La diferencia es que las dobles reemplazan las variables por su valor, y las simples no.

<?php
$nombre = "Ana";
 
echo "Hola, $nombre\n";
echo 'Hola, $nombre\n';
Hola, Ana
Hola, $nombre\n
Comillas dobles "…"Comillas simples '…'
Variables adentroSe reemplazan por su valorSe escriben tal cual
\n (salto de línea), \t (tabulación)FuncionanSe escriben tal cual
Úsalas paraTextos con variablesTextos fijos, sin variables

Caracteres especiales dentro de comillas dobles

EscribesProduce
\nSalto de línea (en la terminal)
\tTabulación
\"Una comilla doble dentro del texto
\$Un signo $ que no es variable
\\Una barra invertida

Comillas dentro de HTML

El HTML usa comillas dobles en sus atributos. Para no mezclarlas, envuelve el texto de PHP en simples cuando lleva HTML sin variables, o usa comillas simples en el atributo.

Incorrecto: comillas dobles dentro de comillas dobles

<?php
echo "<a href="contacto.php">Contacto</a>";
PHP Parse error:  syntax error, unexpected identifier "contacto", expecting "," or ";"

PHP cree que el texto terminó en href= y no entiende lo que sigue.

Correcto: alternar las comillas

<?php
$pagina = "contacto.php";
echo '<a href="contacto.php">Contacto</a>';
echo "<a href='$pagina'>Contacto</a>";

Mejor todavía: escribir el HTML fuera de PHP y usar <?= $pagina ?> solo donde va la variable, como en Sintaxis básica.

Llaves para separar la variable

Si justo después de la variable viene una letra, PHP no sabe dónde termina el nombre. Las llaves { } lo dejan claro.

<?php
$cantidad = 3;
$unidad = "libro";
 
echo "Compraste $cantidad {$unidad}s\n";
Compraste 3 libros

Sin llaves, "$unidads" buscaría una variable llamada $unidads, que no existe.

Concatenar: el punto

El punto . une dos textos. En C no existía; en PHP es la forma de armar textos a partir de partes.

<?php
$nombre = "Ana";
$apellido = "Pérez";
 
$completo = $nombre . " " . $apellido;
echo $completo . "\n";
 
$mensaje = "Hola";
$mensaje .= ", ";
$mensaje .= $nombre;
echo $mensaje . "\n";
Ana Pérez
Hola, Ana

.= agrega texto al final de la variable: $mensaje .= "x" es lo mismo que $mensaje = $mensaje . "x".

Incorrecto: sumar textos con +

<?php
echo "Ana" + " Pérez";
PHP Fatal error:  Uncaught TypeError: Unsupported operand types: string + string

El + es solo para números. Los textos se unen con ..

Correcto

<?php
echo "Ana" . " Pérez";

El problema de las tildes

Las funciones de texto clásicas de PHP cuentan bytes, no letras. Las letras con tilde y la ñ ocupan 2 bytes, así que los resultados salen mal.

<?php
echo strlen("canción") . "\n";
echo strtoupper("canción") . "\n";
8
CANCIóN

“canción” tiene 7 letras, no 8, y la ó no pasó a mayúscula. Para eso existen las funciones mb_ (de multibyte), que cuentan letras de verdad:

<?php
echo mb_strlen("canción") . "\n";
echo mb_strtoupper("canción") . "\n";
7
CANCIÓN

Correcto: con texto en español, usa la versión mb_

Si el texto puede tener tildes o ñ (nombres, ciudades, cualquier cosa que escriba un usuario), usa mb_strlen, mb_strtoupper, mb_strtolower y mb_substr.

Call to undefined function mb_strlen()

Las funciones mb_ vienen en un paquete aparte. Si aparece este error, instálalo y vuelve a levantar el servidor:

sudo apt install php-mbstring

Funciones de texto más usadas

<?php
$entrada = "   ana maría   ";
 
$limpio = trim($entrada);
echo "[$limpio]\n";
echo ucwords($limpio) . "\n";
echo mb_strtoupper($limpio) . "\n";
echo mb_strlen($limpio) . " letras\n";
echo str_replace("maría", "josé", $limpio) . "\n";
var_dump(str_contains($limpio, "ana"));
echo mb_substr("Punta Arenas", 0, 5) . "\n";
echo str_pad("7", 3, "0", STR_PAD_LEFT) . "\n";
[ana maría]
Ana María
ANA MARÍA
9 letras
ana josé
bool(true)
Punta
007

Referencia de funciones de texto

FunciónQué haceEjemploResultado
trim($t)Quita espacios al inicio y al finaltrim(" hola ")"hola"
mb_strlen($t)Cuenta las letrasmb_strlen("ñandú")5
mb_strtoupper($t)Todo a mayúsculasmb_strtoupper("ñandú")"ÑANDÚ"
mb_strtolower($t)Todo a minúsculasmb_strtolower("HOLA")"hola"
ucfirst($t)Primera letra en mayúsculaucfirst("ana")"Ana"
ucwords($t)Primera letra de cada palabraucwords("punta arenas")"Punta Arenas"
str_replace($a, $b, $t)Reemplaza $a por $bstr_replace(",", ".", "5,8")"5.8"
str_contains($t, $a)¿Contiene $a? (distingue mayúsculas)str_contains("hola", "ol")true
str_starts_with($t, $a)¿Empieza con $a?str_starts_with("index.php", "index")true
mb_substr($t, $inicio, $largo)Un pedazo del textomb_substr("Diseño", 0, 4)"Dise"
str_pad($t, $largo, $relleno, STR_PAD_LEFT)Rellena hasta un largostr_pad("7", 3, "0", STR_PAD_LEFT)"007"
str_repeat($t, $n)Repite el textostr_repeat("-", 5)"-----"
number_format(…)Número con formatoVer abajo

trim es la primera línea de cualquier dato de un usuario

Si alguien escribe " ana@correo.cl " con un espacio al final (pasa al copiar y pegar), sin trim() el correo no calza con nada. En la Parte 6 cada dato de un formulario pasa primero por trim().

Números con formato

number_format() convierte un número en texto con separador de miles y la cantidad de decimales que elijas. Por defecto usa el formato inglés (coma para miles y punto para decimales); en Chile es al revés, así que se le indican los separadores.

<?php
$precio = 15990;
$promedio = 5.8;
 
echo number_format($precio) . "\n";
echo "$" . number_format($precio, 0, ",", ".") . "\n";
echo number_format($promedio, 1, ",", ".") . "\n";
echo number_format(4, 1, ",", ".") . "\n";
15,990
$15.990
5,8
4,0

Los cuatro valores de number_format

 number_format($precio, 0, ",", ".")
               ---+--  +  -+-  -+-
                  |    |   |    `- separador de miles
                  |    |   `------ separador de decimales
                  |    `---------- cantidad de decimales
                  `--------------- el número

Incorrecto: calcular con el número ya formateado

number_format() devuelve un texto. Si después intentas sumar "15.990" + 10, PHP lee 15.99 y da 25.99. Formatea al final, solo para mostrar.

Correcto: calcula con el número, formatea al imprimir

<?php
$precio = 15990;
$cantidad = 3;
$total = $precio * $cantidad;
 
echo "Total: $" . number_format($total, 0, ",", ".") . "\n";
Total: $47.970

Pruébalo

  • Imprime el mismo texto con una variable usando comillas dobles y simples, y compara
  • Arma tu nombre completo con . y luego agrégale tu carrera con .=
  • Compara strlen("Magallanes") con strlen("Magallánes") y luego con mb_strlen
  • Muestra 1234567 como $1.234.567
  • Error provocado: escribe un enlace HTML con comillas dobles dentro de comillas dobles

Errores comunes

SíntomaCausaSolución
Se imprime $nombre en vez del valorUsaste comillas simplesUsa comillas dobles, o concatena con .
syntax error, unexpected identifier en una línea con HTMLComillas dobles del atributo dentro de comillas doblesAlterna comillas o escribe el HTML fuera de PHP
Unsupported operand types: string + stringUniste textos con +Usa .
Call to undefined function mb_strlen()Falta el paquete php-mbstringsudo apt install php-mbstring
El largo de un texto con tildes da de másstrlen cuenta bytesUsa mb_strlen

Checkpoint

Intenta responder antes de desplegar cada pregunta.