Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
Boa noite!
Minha página estava rodando tranquila em localhost, com easyphp. Quando migrei para servidor web, que roda no Linux, a função strtolower passou a não funcionar. Todos os acentos são substituitos por "?".
Será que ela não está habilitada ou a versão do php não é compátivel?
Tem alguma forma de habilita-la ? Tentei falar com o servidor, mas eles não resolveram.
Obrigado,
>
8 horas atrás, mldiogo87 disse:
Todos os acentos são substituitos por "?"
Olha, isso está com cara de ser charset errado, ou um utf8_encode colocado recursivamente. Veja se isto não acontece em outras partes do código também, pois é dificil acontecer só na lower
Isso mais me aparenta HTML não indicando o charset da pagina...
A informação vem do banco?!
Confirme o charset do Banco/Tabela/Coluna estão corretos.
A pagina html possui a tag:?
<head>
<meta charset="UTF-8">
<title></title>
</head>
A charset do arquivo está correta?Para não ter os caracteres Unicode afetado por configurações de localidade, utilize o mb_strtolower
$palavra = 'áÁêõ';
echo strtolower($palavra); // ����
echo mb_strtolower($palavra,'UTF-8'); // ááêõ
Importante: A extensão php_mbstring tem que estar habilitada no php.ini
As palavras estão armazenadas em banco de dados e só acontece quando eu uso a função, quando eu as utilizo sem a função não tenho esse problema.
E o "?" a que me refiro não é �, tradicionalmente atribuído à problemas de UTF-8.
Será que não tenho como testar a função, ver se está habilitada ?
Tenho quase certeza que o problema é ela!
>
1 hora atrás, KhaosDoctor disse:
Olha, isso está com cara de ser charset errado, ou um utf8_encode colocado recursivamente. Veja se isto não acontece em outras partes do código também, pois é dificil acontecer só na lower
Só acontece nessa parte do código.
>
1 hora atrás, Guilherme Luiz disse:
Isso mais me aparenta HTML não indicando o charset da pagina...
O charset está indicado, tanto que em localhost rodava normal.
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
>
9 horas atrás, jamesbond disse:
Os acentos são substituídos por "?" apenas após passar pelo strtolower? Ou eles já iniciam assim?
Apenas quando passam.
>
29 minutos atrás, mldiogo87 disse:
E o "?" a que me refiro não é �, tradicionalmente atribuído à problemas de UTF-8.
Mas você testou com mb_strtolower? Este problema é descrito na própria documentação do PHP!
>
31 minutos atrás, mldiogo87 disse:
Será que não tenho como testar a função, ver se está habilitada ?
Você pode testar assim, mas se fosse esse o caso, daria um Fatal error: Call to undefined function
if (function_exists('strtolower'))
{
echo 'existe';
} else {
echo 'Não existe';
}>
13 minutos atrás, EdCesar disse:
Mas você testou com mb_strtolower? Este problema é descrito na própria documentação do PHP!
Você pode testar assim, mas se fosse esse o caso, daria um Fatal error: Call to undefined function
if (function_exists('strtolower'))
{
echo 'existe';
} else {
echo 'Não existe';
}
Realmente, da que existe.
Testei sim o **mb_strtolower**, da na mesma.Vou tentar alternativas.
$eliminaespaco = str_replace(" ","",$local);
$acento = strtolower($eliminaespaco, 'UTF-8');
echo $acento; (aqui ele retorna sem espaco e minuscula, sem problemas, mas com acento)
$nomeimg = preg_replace( '/[`^~\'"]/', null, iconv( 'UTF-8', 'ASCII//TRANSLIT', $acento ) );
echo $nomeimg; (a partir daqui que ele substitui os acentos por ?)
Galera, me desculpem, mil vezes. Na verdade, a função que não estava funcionando é essa:
Ou seja, o iconv...
Desculpem!Resolvido galera:
$tr = strtr(
$acento,
array (
'À' => 'A', 'Á' => 'A', 'Â' => 'A', 'Ã' => 'A', 'Ä' => 'A', 'Å' => 'A',
'Æ' => 'A', 'Ç' => 'C', 'È' => 'E', 'É' => 'E', 'Ê' => 'E', 'Ë' => 'E',
'Ì' => 'I', 'Í' => 'I', 'Î' => 'I', 'Ï' => 'I', 'Ð' => 'D', 'Ñ' => 'N',
'Ò' => 'O', 'Ó' => 'O', 'Ô' => 'O', 'Õ' => 'O', 'Ö' => 'O', 'Ø' => 'O',
'Ù' => 'U', 'Ú' => 'U', 'Û' => 'U', 'Ü' => 'U', 'Ý' => 'Y', 'Ŕ' => 'R',
'Þ' => 's', 'ß' => 'B', 'à' => 'a', 'á' => 'a', 'â' => 'a', 'ã' => 'a',
'ä' => 'a', 'å' => 'a', 'æ' => 'a', 'ç' => 'c', 'è' => 'e', 'é' => 'e',
'ê' => 'e', 'ë' => 'e', 'ì' => 'i', 'í' => 'i', 'î' => 'i', 'ï' => 'i',
'ð' => 'o', 'ñ' => 'n', 'ò' => 'o', 'ó' => 'o', 'ô' => 'o', 'õ' => 'o',
'ö' => 'o', 'ø' => 'o', 'ù' => 'u', 'ú' => 'u', 'û' => 'u', 'ý' => 'y',
'þ' => 'b', 'ÿ' => 'y', 'ŕ' => 'r'
)
);
echo $tr;Não querendo ser do contra, mas por um acaso você aplicara essa função para informações que o usuário ira visualizar?
Pq se for, exibir por exemplo, saucoes ao invés de saudações, não seria errado?
>
2 horas atrás, mldiogo87 disse:
$eliminaespaco = str_replace(" ","",$local);
$acento = strtolower($eliminaespaco, 'UTF-8');
echo $acento; (aqui ele retorna sem espaco e minuscula, sem problemas, mas com acento)
$nomeimg = preg_replace( '/[`^~\'"]/', null, iconv( 'UTF-8', 'ASCII//TRANSLIT', $acento ) );
echo $nomeimg; (a partir daqui que ele substitui os acentos por ?)
Galera, me desculpem, mil vezes. Na verdade, a função que não estava funcionando é essa:
Ou seja, o iconv...
Desculpem!
Por isso eu já perguntei se era só após passar pela função. Execute testes antes amigo.>
Em 17/03/2017 at 13:28, EdCesar disse:
Não querendo ser do contra, mas por um acaso você aplicara essa função para informações que o usuário ira visualizar?
Pq se for, exibir por exemplo, saucoes ao invés de saudações, não seria errado?
Na verdade, eu utilizou isso pra percorrer pastas no servidor, não era interferir na exibição de dados.
Obrigado pela preocupação!
>
Em 17/03/2017 at 14:12, jamesbond disse:
Por isso eu já perguntei se era só após passar pela função. Execute testes antes amigo.
você tem razão. Me desculpe!
>
1 minuto atrás, mldiogo87 disse:
Na verdade, eu utilizou isso pra percorrer pastas no servidor, não era interferir na exibição de dados.
Obrigado pela preocupação!
você tem razão. Me desculpe!
Sem problemas, amigo.
Estamos aqui para tentar ajudar
>
59 minutos atrás, mldiogo87 disse:
Boa noite!
Minha página estava rodando tranquila em localhost, com easyphp. Quando migrei para servidor web, que roda no Linux, a função strtolower passou a não funcionar. Todos os acentos são substituitos por "?".
Será que ela não está habilitada ou a versão do php não é compátivel?
Tem alguma forma de habilita-la ? Tentei falar com o servidor, mas eles não resolveram.
Obrigado,
Os acentos são substituídos por "?" apenas após passar pelo strtolower? Ou eles já iniciam assim?