Ir para conteúdo

POWERED BY:

Arquivado

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

criatividade zero

acentos - critico

Recommended Posts

1ªmente sei que o tema esta batido, mas não achei NADA que resolvesse

uso UTF e sem BOM pois dou suporte multi-idioma

ja setei header('Content-Type: text/html; charset=utf-8')

 

 

strtolower, definitivamente não funciona com acento, ja tentei com setlocale, mas acho que tb não funciona com UTF

echo strtolower('Meu acento não funciona');
// meu acento n�o funciona

 

a unica forma foi usar essa tranqueira toda

echo mb_convert_case('Meu acento não funciona', MB_CASE_LOWER, 'UTF-8');
//meu acento não funciona

 

 

agora eu pergunto

charset UTF é tido como atual e mais completo, e pq não interpreta os simples acentos mas da suporte ate pra idioma asiatico???

 

 

vcs que usam UTF, como tratam os acentos pra M/m?

 

 

 

outra duvida é sobre caracteres especiais

quando dou alt+4546 no dream ou no bloco de notas, exibe na tela

quando submeto por um form e dou echo, o alt+4546 exibe

 

seria um erro na config do programa, ou seria problema mesmo de codificação???

Compartilhar este post


Link para o post
Compartilhar em outros sites
charset UTF é tido como atual e mais completo, e pq não interpreta os simples acentos mas da suporte ate pra idioma asiatico???

Não é o UTF-8 que não dá suporte. É a função strtolower do php. Na página do manual existem algumas sugestões de work-arounds.

 

Você está precisando isso exatamente para que? Se for só para exibir, recomendaria utilizar o CSS text-transform:lowercase;.

Compartilhar este post


Link para o post
Compartilhar em outros sites
charset UTF é tido como atual e mais completo, e pq não interpreta os simples acentos mas da suporte ate pra idioma asiatico???

Não é o UTF-8 que não dá suporte. É a função strtolower do php. Na página do manual existem algumas sugestões de work-arounds.

ja li isso de cabo a rabo e nada encontrei que fosse funcional

 

o charset é milti idioma, mas a função strtolower é restrita

pq fazer uma função que não suporta acento :huh:

 

 

 

Você está precisando isso exatamente para que?[/b]

 

trabalho com entradas multi idiomas

dentre algumas necessidades, preciso tratar alguns campos e passar para minusculo antes gravar no DB

temos a possibilidade de usar mb_strtolower($str, 'UTF-8');

 

 

é muito estranho a strtolower não funcionar com UTF

echo strtolower('Meu acento não funciona');

com charset ISO funciona sem problema, o que faz parecer um erro de codificação

Compartilhar este post


Link para o post
Compartilhar em outros sites

Ah, entendi. Pesquisando, achei esse conteúdo que parece ser bem interessante: http://bugs.php.net/19257

 

Veja o comentário:

 

This is not a bug in PHP; it's down to whether your system

can support this and has the appropriate locales installed.

 

A quick and dirty example might look this this in C:

 

#include <ctype.h>

main()

{

char buff[1024];

 

while(fgets(buff, sizeof(buff), stdin)) {

int i, l;

l = strlen(buff);

for (i = 0; i < l; i++)

buff = toupper(buff);

puts(buff);

}

}

 

If that little program works, your system supports

this conversion. If it doesn't, then PHP doesn't

either.

 

E logo:

 

I've added a new function to the mbstring extension in CVS.

This function will be in PHP 4.3.

 

I would appreciate your feedback.

Try a snapshot from http://snaps.php.net/php4-latest.tar.gz

dated after this message.

 

usage:

proto string mb_convert_case(string str, int mode [, string encoding]);

 

mode can be one of MB_CASE_UPPER, MB_CASE_LOWER or MB_CASE_TITLE.

encoding specifies the encoding of str; if omitted, the

mbstring.internal_encoding value will be used.

The return value is str with the appropriate case folding applied.

 

The function works by internally converting the string into UCS-4 format

and applying php_unicode_to(upper|lower|title) to each unicode character,

and then converts the string back into the original encoding.

 

The code for your test case would look like this

(and works for me):

 

<?

$str = "Test".utf8_encode("\xFC");

 

$strU = mb_convert_case($str, MB_CASE_UPPER, "utf-8");

$strL = mb_convert_case($str, MB_CASE_LOWER, "utf-8");

?>

<PRE>

str = '<? echo $str; ?>'

strU = '<? echo $strU; ?>'

strL = '<? echo $strL; ?>'

</PRE>

Compartilhar este post


Link para o post
Compartilhar em outros sites

Ola amigo a questao do acento e tals tenta resolver com isso....

 

header("Content-Type: text/html; charset=ISO-8859-1", true);

 

Espero que ajude vlw.

Compartilhar este post


Link para o post
Compartilhar em outros sites

uft-8 é multibyte.

 

para caracteres multibyte, utilize as funções multibyte do php

 

 

o equivalente a strtolower() é mb_strtolower()

 

 

http://php.net/mb_strtolower

 

 

obs: há outros fatores que influenciam, como a configuração do ambiente e setagens para a biblioteca mbstring do php.

Compartilhar este post


Link para o post
Compartilhar em outros sites

o que nao consigo entender é a strtolower() não trabalhar com acentos em charset UTF, sendo que este é o recomendado

 

 

e a minha outra duvida?

quando dou alt+4546 no dream ou no bloco de notas, exibe na tela ┬

quando submeto por um form e dou echo, o alt+4546 exibe ᇂ

 

nao deveria aparecer o mesmo char?

Compartilhar este post


Link para o post
Compartilhar em outros sites

de novo... acentos... <_<

 

quando digito diretamente os acentos na URL, eles são convertidos

'á' converte em '%E1'

 

 

no meu localhost

http://localhost/acento.php?q=%E1cento

echo retorna %E1cento

 

no G1 ele mostra o acento normal

http://busca.globo.com/Busca/g1/?query=%E1cento

 

 

qual meu erro dessa vez?

ja dei urldecode e nada

Compartilhar este post


Link para o post
Compartilhar em outros sites

O PHP trabalha nativamente com o charset ISO-8859-1, por isso, se você estiver trabalhando com UTF-8 poderá ter problemas ao usar certas funções nativas.

 

Tudo o que você precisa fazer para contornar o problema é converter a string para ISO-8859-1 usando a função utf8_decode, em seguida você usa a função strtolower e por fim converte para UTF-8 novamente usando a função utf8_encode.

 

Exemplo:

 

<?php
$str = 'Texto com acentuação.';
$str = utf8_decode($str);
$str = strtolower($str);
$str = utf8_encode($str);

 

É para evitar esse tipo de problema que a partir do PHP 6 espera-se que o PHP trabalhe nativamente com o charset UTF-8, já que é um charset que funciona perfeitamente com qualquer idioma e evitaria um monte de transtornos aos programadores. Mas infelizmente já vi boatos na internet dizendo que talvez essa mudança não ocorra já na próxima versão.

Compartilhar este post


Link para o post
Compartilhar em outros sites

o problema não são textos com acento...

são acentos digitados na URL diretamente

'á' converte em '%E1'

 

 

localhost transforma ácento em %E1cento

http://localhost/acento.php?q=%E1cento

 

no G1, no Google...

mesmo a url sendo %E1cento

a query de consulta exibe ácento

 

 

ambos são UTF inclusive minhas páginas

nao funciona localmente utf8_decode('%E1cento');

Compartilhar este post


Link para o post
Compartilhar em outros sites

mas isso nao tem nada a ver com o que citei...

 

%E1cento -> ácento

tem como exibir correto?

Você diz na URL da barra de endereços do navegador?

 

Se for acho que não dá não, é conportamento padrão do navegador. Mas uma URL codificada recebida via GET e decodificada como Leo falou, deveria resolver o problema.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Você diz na URL da barra de endereços do navegador?

 

Se for acho que não dá não, é conportamento padrão do navegador. Mas uma URL codificada recebida via GET e decodificada como Leo falou, deveria resolver o problema.

 

sim sim

submetendo via form não ha problema, mas quando digito direto ocorre o erro

uso o mesmo navegador nos 'testes' que citei, por isso não parece ser apenas um problema do navegador

 

usando o Opera

quando digito ácento ele vira %E1cento

mas mesmo %E1cento, no G1, Google... eles interpretam como ácento

 

 

então deve haver alguma função para tratar isso

 

 

pela url -> á = %E1

pelo form -> á = %C3%A1

 

um caso exibe corretamente com utf8_encode

o outro com urldecode

Compartilhar este post


Link para o post
Compartilhar em outros sites

parece haver conflito em algum ponto da configuração do ambiente ou do sistema.

 

tente fazer um teste antes do "decode"

 

$enc = mb_detect_encoding( $str_da_url );
echo $enc; exit; // for debug purposes only

 

 

no phpinfo(), como está mostrando as configurações do mbstring ?

 

exemplo:

http://img690.imageshack.us/i/53853239.jpg/

Compartilhar este post


Link para o post
Compartilhar em outros sites

$enc = mb_detect_encoding( $str_da_url );
echo $enc; exit; // for debug purposes only

$enc = mb_detect_encoding( $_SERVER['REQUEST_URI'] );

retorno - ASCII

 

$enc = mb_detect_encoding( $_GET['q'] );

retorno - UTF-8

 

testando com os 2 casos citados '%E1 e %C3%A1'

 

 

no phpinfo()

 

mbstringMultibyte Support enabled

Multibyte string engine libmbfl

Multibyte (japanese) regex support enabled

Multibyte regex (oniguruma) version 4.4.4

Multibyte regex (oniguruma) backtrack check On

 

mbstring extension makes use of "streamable kanji code filter and converter", which is distributed under the GNU Lesser General Public License version 2.1.

 

Directive Local Value Master Value

mbstring.detect_order no value no value

mbstring.encoding_translation Off Off

mbstring.func_overload 0 0

mbstring.http_input pass pass

mbstring.http_output pass pass

mbstring.internal_encoding no value no value

mbstring.language neutral neutral

mbstring.strict_detection Off Off

mbstring.substitute_character no value no value

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.