Dica: PHP Regex e UTF-8
Estava trabalhando com regex (expressões regulares) essa semana e me deparei com o seguinte problema:
<?php$texto = "CALÇA MASCULINA";
$q = "calça";
$matches = array();preg_match("#{$q}#i", $texto, $matches);print_r($matches);
A intenção desse código é encontrar a palavra calça dentro do texto CALÇA MASCULINA. Porém, mesmo utilizando o modificador /i após o pattern(“#{$q}#i”), para que não diferenciar letras maiúsculas de minúsculas, o preg_match não consegue encontrar a palavra calça. Isso acontece porque o caractere ç é diferente do caractere Ç. O mesmo acontece para o caractere ã e à por exemplo.
Para resolver o "problema" do encoding, basta adicionar o modificador u após o pattern (“#{$q}#iu”):
<?php$texto = "CALÇA MASCULINA";
$q = "calça";
$matches = array();preg_match("#{$q}#iu", $texto, $matches);print_r($matches);
Basicamente, o modificador /u aciona uma funcionalidade adicional de PCRE que é incompatível com Perl. As strings do nosso pattern são tratadas como UTF-8.
Vale lembrar que o modificador /u deve estar minúsculo, pois o /U é outro modificador.
Para mais detalhes sobre este e outros modificadores consulte a documentação do php: http://php.net/manual/pt_BR/reference.pcre.pattern.modifiers.php
Espero ter ajudado \o/
Até a próxima!
