<h2>Fundamentos de Strings em PHP</h2>
<p>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.</p>
<pre><code class="language-php">$nome = "João";
$sobrenome = 'Silva';
// Interpolação com aspas duplas
echo "Olá, {$nome} {$sobrenome}"; // Output: Olá, João Silva
// Sem interpolação
echo 'Olá, $nome'; // Output: Olá, $nome
// Heredoc - permite interpolação
$mensagem = <<<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 = "Olá" . ", " . "mundo!";
echo $saudacao; // Output: Olá, mundo!
$texto = "Programação em PHP";
echo strlen($texto); // 19 bytes
echo mb_strlen($texto, 'UTF-8'); // 19 caracteres (neste caso, igual)
// Com acentuação
$titulo = "Configuração";
echo mb_strlen($titulo, 'UTF-8'); // 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 = "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") !== false) {
echo "Encontrado!"; // 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 = "maçã,banana,laranja,uva";
$frutas = explode(",", $csv);
print_r($frutas);
// Array ( [0] => maçã [1] => banana [2] => laranja [3] => uva )
// Rejuntar
$texto = implode(" - ", $frutas);
echo $texto; // Output: maçã - banana - laranja - uva
// Dividir em chunks
$codigo = "A1B2C3D4";
$grupos = str_split($codigo, 2);
print_r($grupos);
// Array ( [0] => A1 [1] => B2 [2] => C3 [3] => 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 = "joão da silva santos";
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, 'UTF-8'); // 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 = " João Silva \n";
echo trim($entrada); // João Silva
echo ltrim($entrada); // João Silva \n
$texto = "PHP é ótimo. PHP é poderoso.";
echo str_replace("PHP", "JavaScript", $texto);
// Output: JavaScript é ótimo. JavaScript é poderoso.
// Insensível a maiúsculas
echo str_ireplace("php", "Python", $texto);
// Output: Python é ótimo. Python é poderoso.
// Regex
$telefone = "11-98765-4321";
echo preg_replace("/\D/", "", $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("ID: %03d", $id);
echo $resultado; // ID: 042
// number_format
$preco = 1500.75;
echo number_format($preco, 2, ",", ".");
// Output: 1.500,75
// wordwrap
$texto = "Este é um texto muito longo que precisa ser quebrado";
echo wordwrap($texto, 20, "\n");
// Quebra a cada 20 caracteres
// str_pad
echo str_pad("PHP", 10, "", STR_PAD_RIGHT); // PHP******
echo str_pad("123", 5, "0", 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 = "https://www.exemplo.com.br";
$email = "contato@exemplo.com";
$numero = "12345";
// PHP 8+ - str_contains
if (str_contains($url, "exemplo")) {
echo "URL válida";
}
// Validação de email
if (filter_var($email, FILTER_VALIDATE_EMAIL)) {
echo "Email válido";
}
// Verificar se é apenas dígitos
if (ctype_digit($numero)) {
echo "Apenas números";
}
// Verificar se é alfanumérico
if (ctype_alnum("abc123")) {
echo "Alfanumérico válido";
}</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 = "<script>alert('Hacker')</script>";
// Escaper HTML
$seguro = htmlspecialchars($entrada, ENT_QUOTES, 'UTF-8');
echo $seguro;
// Output: &lt;script&gt;alert('Hacker')&lt;/script&gt;
// JSON
$dados = ["nome" => "João", "idade" => 30];
$json = json_encode($dados);
echo $json; // {"nome":"João","idade":30}
// Decodificar
$recuperado = json_decode($json, true);
print_r($recuperado); // Array ( [nome] => João [idade] => 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>