PHP

O que Todo Dev Deve Saber sobre Strings em PHP: Manipulação, Funções e Formatação

10 min de leitura

O que Todo Dev Deve Saber sobre Strings em PHP: Manipulação, Funções e Formatação

Fundamentos de Strings em PHP Uma string em PHP é uma sequência de caracteres que pode ser delimitada por aspas simples (''), duplas ("") ou por heredoc/nowdoc. A escolha do delimitador impacta na interpretação de variáveis e caracteres especiais. Strings com aspas duplas permitem interpolação de variáveis, enquanto aspas simples tratam tudo literalmente (mais eficiente em termos de performance). Para strings muito longas, heredoc oferece melhor legibilidade. strlen() mbstrlen() php $saudacao = "Olá" . ", " . "mundo!"; echo $saudacao; // Output: Olá, mundo! $texto = "Programação em PHP"; echo strlen($texto); // 19 bytes echo mbstrlen($texto, 'UTF-8'); // 19 caracteres (neste caso, igual) // Com acentuação $titulo = "Configuração"; echo mbstrlen($titulo, 'UTF-8'); // 12 caracteres (strlen daria 14 bytes) substr() strpos() substr() strpos() strpos() !== != php $email = "usuario@dominio.com.br"; // Extração $dominio = substr($email, strpos($email, '@') + 1); echo $dominio; // Output: dominio.com.br // Busca - cuidado com o retorno 0 $texto = "PHP é poderoso"; if (strpos($texto, "PHP")

<h2>Fundamentos de Strings em PHP</h2>

<p>Uma string em PHP é uma sequência de caracteres que pode ser delimitada por aspas simples (&#039;&#039;), duplas (&quot;&quot;) ou por heredoc/nowdoc. A escolha do delimitador impacta na interpretação de variáveis e caracteres especiais. Strings com aspas duplas permitem interpolação de variáveis, enquanto aspas simples tratam tudo literalmente (mais eficiente em termos de performance). Para strings muito longas, heredoc oferece melhor legibilidade.</p>

<pre><code class="language-php">$nome = &quot;João&quot;;

$sobrenome = &#039;Silva&#039;;

// Interpolação com aspas duplas

echo &quot;Olá, {$nome} {$sobrenome}&quot;; // Output: Olá, João Silva

// Sem interpolação

echo &#039;Olá, $nome&#039;; // Output: Olá, $nome

// Heredoc - permite interpolação

$mensagem = &lt;&lt;&lt;EOT

Bem-vindo, $nome!

Este é um texto com múltiplas linhas.

EOT;

echo $mensagem;</code></pre>

<blockquote><p><strong>Dica prática:</strong> Use aspas simples como padrão; use duplas apenas quando precisar interpolar variáveis. Heredoc é ideal para templates ou textos grandes.</p></blockquote>

<h2>Manipulação de Strings</h2>

<h3>Concatenação e Comprimento</h3>

<p>A concatenação em PHP usa o operador ponto (.) ou interpolação dentro de aspas duplas. A função <code>strlen()</code> retorna o número de bytes (não caracteres Unicode), então para trabalhar com caracteres multibyte use <code>mb_strlen()</code>.</p>

<pre><code class="language-php">$saudacao = &quot;Olá&quot; . &quot;, &quot; . &quot;mundo!&quot;;

echo $saudacao; // Output: Olá, mundo!

$texto = &quot;Programação em PHP&quot;;

echo strlen($texto); // 19 bytes

echo mb_strlen($texto, &#039;UTF-8&#039;); // 19 caracteres (neste caso, igual)

// Com acentuação

$titulo = &quot;Configuração&quot;;

echo mb_strlen($titulo, &#039;UTF-8&#039;); // 12 caracteres (strlen daria 14 bytes)</code></pre>

<h3>Extração e Busca</h3>

<p>As funções <code>substr()</code> e <code>strpos()</code> são fundamentais. <code>substr()</code> extrai uma porção da string usando índices, enquanto <code>strpos()</code> localiza a primeira ocorrência de um substring. Sempre verifique o retorno de <code>strpos()</code> usando <code>!==</code> (não apenas <code>!=</code>), pois pode retornar 0 (encontrado no início).</p>

<pre><code class="language-php">$email = &quot;usuario@dominio.com.br&quot;;

// Extração

$dominio = substr($email, strpos($email, &#039;@&#039;) + 1);

echo $dominio; // Output: dominio.com.br

// Busca - cuidado com o retorno 0

$texto = &quot;PHP é poderoso&quot;;

if (strpos($texto, &quot;PHP&quot;) !== false) {

echo &quot;Encontrado!&quot;; // Executa

}

// Pegar últimos 4 caracteres

$extensao = substr($email, -4);

echo $extensao; // Output: .com</code></pre>

<h3>Divisão e Junção</h3>

<p><code>explode()</code> divide uma string em um array usando um delimitador; <code>implode()</code> faz o inverso, unindo elementos de um array em uma string. <code>str_split()</code> divide em pedaços de um tamanho fixo.</p>

<pre><code class="language-php">$csv = &quot;maçã,banana,laranja,uva&quot;;

$frutas = explode(&quot;,&quot;, $csv);

print_r($frutas);

// Array ( [0] =&gt; maçã [1] =&gt; banana [2] =&gt; laranja [3] =&gt; uva )

// Rejuntar

$texto = implode(&quot; - &quot;, $frutas);

echo $texto; // Output: maçã - banana - laranja - uva

// Dividir em chunks

$codigo = &quot;A1B2C3D4&quot;;

$grupos = str_split($codigo, 2);

print_r($grupos);

// Array ( [0] =&gt; A1 [1] =&gt; B2 [2] =&gt; C3 [3] =&gt; D4 )</code></pre>

<h2>Transformação e Formatação</h2>

<h3>Caso de Caracteres</h3>

<p>As funções <code>strtoupper()</code>, <code>strtolower()</code>, <code>ucfirst()</code> e <code>ucwords()</code> controlam maiúsculas e minúsculas. Para trabalhar com caracteres multibyte, prefira as variantes <code>mb_strtoupper()</code> e <code>mb_strtolower()</code>.</p>

<pre><code class="language-php">$nome = &quot;joão da silva santos&quot;;

echo strtoupper($nome); // JOÃO DA SILVA SANTOS

echo strtolower($nome); // joão da silva santos

echo ucfirst($nome); // João da silva santos

echo ucwords($nome); // João Da Silva Santos

// Multibyte

echo mb_strtoupper($nome, &#039;UTF-8&#039;); // JOÃO DA SILVA SANTOS</code></pre>

<h3>Remoção e Substituição</h3>

<p><code>trim()</code> remove espaços (ou caracteres especificados) do início e fim; <code>ltrim()</code> e <code>rtrim()</code> atuam apenas em um lado. <code>str_replace()</code> substitui todas as ocorrências (sensível a maiúsculas), enquanto <code>str_ireplace()</code> é insensível. <code>preg_replace()</code> usa expressões regulares para substituições complexas.</p>

<pre><code class="language-php">$entrada = &quot; João Silva \n&quot;;

echo trim($entrada); // João Silva

echo ltrim($entrada); // João Silva \n

$texto = &quot;PHP é ótimo. PHP é poderoso.&quot;;

echo str_replace(&quot;PHP&quot;, &quot;JavaScript&quot;, $texto);

// Output: JavaScript é ótimo. JavaScript é poderoso.

// Insensível a maiúsculas

echo str_ireplace(&quot;php&quot;, &quot;Python&quot;, $texto);

// Output: Python é ótimo. Python é poderoso.

// Regex

$telefone = &quot;11-98765-4321&quot;;

echo preg_replace(&quot;/\D/&quot;, &quot;&quot;, $telefone); // 11987654321 (remove não-dígitos)</code></pre>

<h3>Formatação de Saída</h3>

<p><code>sprintf()</code> formata strings como em C; <code>number_format()</code> formata números; <code>wordwrap()</code> quebra linhas; <code>str_pad()</code> preenche espaços.</p>

<pre><code class="language-php">// sprintf - semelhante a printf

$id = 42;

$resultado = sprintf(&quot;ID: %03d&quot;, $id);

echo $resultado; // ID: 042

// number_format

$preco = 1500.75;

echo number_format($preco, 2, &quot;,&quot;, &quot;.&quot;);

// Output: 1.500,75

// wordwrap

$texto = &quot;Este é um texto muito longo que precisa ser quebrado&quot;;

echo wordwrap($texto, 20, &quot;\n&quot;);

// Quebra a cada 20 caracteres

// str_pad

echo str_pad(&quot;PHP&quot;, 10, &quot;&quot;, STR_PAD_RIGHT); // PHP******

echo str_pad(&quot;123&quot;, 5, &quot;0&quot;, STR_PAD_LEFT); // 00123</code></pre>

<h2>Validação e Limpeza</h2>

<h3>Verificação de Conteúdo</h3>

<p>Funções como <code>str_contains()</code> (PHP 8+), <code>strpos()</code>, <code>ctype_*</code> e <code>filter_var()</code> verificam se uma string contém ou representa um padrão específico. Use validação antes de processar dados de usuários.</p>

<pre><code class="language-php">$url = &quot;https://www.exemplo.com.br&quot;;

$email = &quot;contato@exemplo.com&quot;;

$numero = &quot;12345&quot;;

// PHP 8+ - str_contains

if (str_contains($url, &quot;exemplo&quot;)) {

echo &quot;URL válida&quot;;

}

// Validação de email

if (filter_var($email, FILTER_VALIDATE_EMAIL)) {

echo &quot;Email válido&quot;;

}

// Verificar se é apenas dígitos

if (ctype_digit($numero)) {

echo &quot;Apenas números&quot;;

}

// Verificar se é alfanumérico

if (ctype_alnum(&quot;abc123&quot;)) {

echo &quot;Alfanumérico válido&quot;;

}</code></pre>

<h3>Sanitização</h3>

<p><code>htmlspecialchars()</code> escapa caracteres HTML (essencial para evitar XSS); <code>addslashes()</code> e <code>stripslashes()</code> lidam com aspas; <code>json_encode()</code> serializa para JSON seguramente.</p>

<pre><code class="language-php">$entrada = &quot;&lt;script&gt;alert(&#039;Hacker&#039;)&lt;/script&gt;&quot;;

// Escaper HTML

$seguro = htmlspecialchars($entrada, ENT_QUOTES, &#039;UTF-8&#039;);

echo $seguro;

// Output: &amp;lt;script&amp;gt;alert(&#039;Hacker&#039;)&amp;lt;/script&amp;gt;

// JSON

$dados = [&quot;nome&quot; =&gt; &quot;João&quot;, &quot;idade&quot; =&gt; 30];

$json = json_encode($dados);

echo $json; // {&quot;nome&quot;:&quot;João&quot;,&quot;idade&quot;:30}

// Decodificar

$recuperado = json_decode($json, true);

print_r($recuperado); // Array ( [nome] =&gt; João [idade] =&gt; 30 )</code></pre>

<h2>Conclusão</h2>

<p>Nesta aula abordamos os três pilares da manipulação de strings em PHP: <strong>operações básicas</strong> (concatenação, extração, divisão), <strong>transformação</strong> (caso, substituição, formatação) e <strong>validação/sanitização</strong> (essencial para segurança). Domine <code>strpos()</code>, <code>substr()</code>, <code>explode()</code>, <code>str_replace()</code> e <code>htmlspecialchars()</code> — estas cinco funções resolvem 80% dos casos reais. Lembre-se sempre de considerar caracteres multibyte ao trabalhar com acentuação, e nunca confie em dados do usuário sem validar e sanitizar primeiro.</p>

<h2>Referências</h2>

<ul>

<li><a href="https://www.php.net/manual/en/ref.strings.php" target="_blank" rel="noopener noreferrer">PHP Manual - String Functions</a></li>

<li><a href="https://www.php.net/manual/en/ref.mbstring.php" target="_blank" rel="noopener noreferrer">PHP Manual - Multibyte String Functions</a></li>

<li><a href="https://cheatsheetseries.owasp.org/cheatsheets/Cross_Site_Scripting_Prevention_Cheat_Sheet.html" target="_blank" rel="noopener noreferrer">OWASP - XSS Prevention Cheat Sheet</a></li>

<li><a href="https://www.php.net/manual/en/ref.filter.php" target="_blank" rel="noopener noreferrer">PHP Manual - Filter Functions</a></li>

<li><a href="https://phptherightway.com/" target="_blank" rel="noopener noreferrer">PHP The Right Way - Strings</a></li>

</ul>

Comentários

Mais em PHP

Como Usar Prepared Statements e Prevenção de SQL Injection em Produção
Como Usar Prepared Statements e Prevenção de SQL Injection em Produção

O Problema: SQL Injection SQL Injection é uma das vulnerabilidades mais críti...

Guia Completo de PHPUnit na Prática: Testes Unitários em PHP
Guia Completo de PHPUnit na Prática: Testes Unitários em PHP

O que é PHPUnit e Por Que Usar PHPUnit é o framework de testes unitários mais...

Dominando Traits em PHP: Reuso de Código sem Herança em Projetos Reais
Dominando Traits em PHP: Reuso de Código sem Herança em Projetos Reais

O que são Traits e Por Que Usá-las Traits em PHP são mecanismos que permitem...