Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

vieira.rrafael

[Resolvido] Expressão regular ignora acento

Recommended Posts

Pois é. Aqui que tá o negócio.

Eu experimentei

preg_match("/[\w]+/i", "José", $result);
echo "{$result[0]}\n";
#e
preg_match("/[[:lower:]]+/i", "José", $result);
echo "{$result[0]}\n";

E ainda não funciona.

Compartilhar este post


Link para o post
Compartilhar em outros sites

verifique o encode-charset

O default_charset está definido para utf8.

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html lang="pt-br">
   <head>
       <meta http-equiv="Content-Type" content="text/html;charset=UTF-8" />
       <title> Olá mundo </title>
   </head>
   <body>
       <?php
           ini_set('display_errors', 1);
           ini_set('error_reporting', E_ALL|E_NOTICE);
           ini_set('default_charset', 'utf8');

           preg_match("/[[:alpha:]]+/i", "José", $result);
           echo "{$result[0]}\n";
       ?>
   </body>
</html>

Ainda não funciona.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Veja assim:

preg_match("/[[:alpha:]]+/i", "José", $result);

 

 

Estranho, não "pegou" os acentos aqui também <_<

 

 

Tente assim:

Apesar de ser a mesma coisa [[:alpha:]] == [A-Za-zÀ-ú]

<?php

preg_match( '/[A-Za-zÀ-ú]+/', 'José', $result );
var_dump( $result );

Compartilhar este post


Link para o post
Compartilhar em outros sites

Estranho, não "pegou" os acentos aqui também <_<

 

 

Tente assim:

Apesar de ser a mesma coisa [[:alpha:]] == [A-Za-zÀ-ú]

<?php

preg_match( '/[A-Za-zÀ-ú]+/', 'José', $result );
var_dump( $result );

 

Agora funcionou. Estranho mesmo não funcionar antes.

Compartilhar este post


Link para o post
Compartilhar em outros sites

me referi ao encode do php..

 

deve estar com uft-8 without-bom

 

além do encode verifique a configuração do mbstring

 

por curiosidade testei no php 5.3.3 + apache 2.2.14 + win7ultimate 64

 

 

<?php 
date_default_timezone_set('Asia/Tokyo');

error_reporting( E_ALL ); 
ini_set( 'display_errors', 1 );
define( 'CHARSET',   'UTF-8' );
ini_set( 'default_charset', CHARSET );
ini_set( 'mbstring.http_output', CHARSET );
ini_set( 'mbstring.internal_encoding', CHARSET );

header( 'Content-Type: text/html; charset=' . CHARSET );

preg_match("/[\p{Ll}\p{Lu}]+/", "José", $result);
echo $result[0] . PHP_EOL; // aqui corrompeu o caracter com acentuação "é". O restante deu certo.
echo '<br />';
preg_match("/[\w]+/i", "José", $result);
echo $result[0] . PHP_EOL;
echo '<br />';
#e
preg_match("/[[:lower:]]+/i", "José", $result);
echo $result[0] . PHP_EOL;
echo '<br />';
preg_match("/[[:alpha:]]+/i", "José", $result);
echo $result[0] . PHP_EOL;
?>

 

resultado:

Jos� 
José 
José 
José

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.