Ir para conteúdo

POWERED BY:

Arquivado

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

lukasscott

Problema com uma função

Recommended Posts

Tenho a seguinte função e não consigo implementar em meu código:

function sanitizar_utf8($texto) {
    $saida = '';

    $i = 0;
    $len = strlen($texto);
    while ($i < $len) {
        $char = $texto[$i++];
        $ord  = ord($char);

        // Primeiro byte 0xxxxxxx: simbolo ascii possui 1 byte
        if (($ord & 0x80) == 0x00) {

            // Se e' um caractere de controle
            if (($ord >= 0 && $ord <= 31) || $ord == 127) {

                // Incluir se for: tab, retorno de carro ou quebra de linha
                if ($ord == 9 || $ord == 10 || $ord == 13) {
                    $saida .= $char;
                }

            // Simbolo ASCII
            } else {
                $saida .= $char;
            }

        // Primeiro byte 110xxxxx ou 1110xxxx ou 11110xxx: simbolo possui 2, 3 ou 4 bytes
        } else {

            // Determinar quantidade de bytes analisando os bits da esquerda para direita
            $bytes = 0;
            for ($b = 7; $b >= 0; $b--) {
                $bit = $ord & (1 << $b);
                if ($bit) {
                    $bytes += 1;
                } else {
                    break;
                }
            }

            switch ($bytes) {
            case 2: // 110xxxxx 10xxxxxx
            case 3: // 1110xxxx 10xxxxxx 10xxxxxx
            case 4: // 11110xxx 10xxxxxx 10xxxxxx 10xxxxxx
                $valido = true;
                $saida_padrao = $char;
                $i_inicial = $i;
                for ($b = 1; $b < $bytes; $b++) {
                    if (!isset($texto[$i])) {
                        $valido = false;
                        break;
                    }
                    $char_extra = $texto[$i++];
                    $ord_extra  = ord($char_extra);

                    if (($ord_extra & 0xC0) == 0x80) {
                        $saida_padrao .= $char_extra;
                    } else {
                        $valido = false;
                        break;
                    }
                }
                if ($valido) {
                    $saida .= $saida_padrao;
                } else {
                    $saida .= ($ord < 0x7F || $ord > 0x9F) ? utf8_encode($char) : '';
                    $i = $i_inicial;
                }
                break;
            case 1:  // 10xxxxxx: ISO-8859-1
            default: // 11111xxx: ISO-8859-1
                $saida .= ($ord < 0x7F || $ord > 0x9F) ? utf8_encode($char) : '';
                break;
            }
        }
    }
    return $saida;
}

Essa função substitui caracteres.

Preciso usar ela em 3 variáveis, seguem as variáveis á baixo:

$title = $data['title'];
$fulltxt = $data['fulltext'];
$desc = substr($data['description'], 0,254);

Mais por algum motivo não esta fazendo a substituição dos caracteres.

Alguém poderia por favor me dar um exemplo de como usar essa função?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Quando utilizo a função diversas vezes:

sanitizar_utf8($title)
sanitizar_utf8($keywords)
sanitizar_utf8($desc)
sanitizar_utf8($pagetext)

Recebo o seguinte erro:

Parse error: syntax error, unexpected T_STRING in /home/xxxxxxx/public_html/Page3.php on line 201

 

Na linha 201 fica esta linha:

sanitizar_utf8($keywords)

Que é a segunda vez que chamo a função na mesma pagina.

 

ALGUÉM ME DÁ UMA LUZ!!!

Compartilhar este post


Link para o post
Compartilhar em outros sites

Você não especificou o que a função deve retornar.

Seria apenas a remoção dos acentos, como no exemplo "remoção -> remocao"?

 

Tente assim:

function removeAccents( $string ) {
        $ascii['a'] = range(224, 230);
        $ascii['A'] = range(192, 197);
        $ascii['e'] = range(232, 235);
        $ascii['E'] = range(200, 203);
        $ascii['i'] = range(236, 239);
        $ascii['I'] = range(204, 207);
        $ascii['o'] = array_merge(range(242, 246), array(240, 248));
        $ascii['O'] = range(210, 214);
        $ascii['u'] = range(249, 252);
        $ascii['U'] = range(217, 220);
        $ascii['c'] = array(231);
        $ascii['C'] = array(199);


        foreach( $ascii as $key => $item ):
            $accents = '/(';
            foreach ( $item as $code )
                $accents .= utf8_encode( chr( $code ) ) . '|';
            $accents = rtrim( $accents , '|' );
            $change[ $key ] = $accents . ')/';
        endforeach;


        return preg_replace(
            array_values( $change ), array_keys( $change ), $string
        );
}

Compartilhar este post


Link para o post
Compartilhar em outros sites

sobre o erro de sintaxe, é devido à falta de ponto-e-vírgula no final de cada chamada.

 

 

sobre a dúvida principal, dê uma olhada neste link:

http://stackoverflow.com/a/1401716

 

Usei essa função para importar um banco ISO para um novo banco, todo em UTF-8

Compartilhar este post


Link para o post
Compartilhar em outros sites

 

Você não especificou o que a função deve retornar.

Seria apenas a remoção dos acentos, como no exemplo "remoção -> remocao"?

 

Tente assim:

function removeAccents( $string ) {
        $ascii['a'] = range(224, 230);
        $ascii['A'] = range(192, 197);
        $ascii['e'] = range(232, 235);
        $ascii['E'] = range(200, 203);
        $ascii['i'] = range(236, 239);
        $ascii['I'] = range(204, 207);
        $ascii['o'] = array_merge(range(242, 246), array(240, 248));
        $ascii['O'] = range(210, 214);
        $ascii['u'] = range(249, 252);
        $ascii['U'] = range(217, 220);
        $ascii['c'] = array(231);
        $ascii['C'] = array(199);


        foreach( $ascii as $key => $item ):
            $accents = '/(';
            foreach ( $item as $code )
                $accents .= utf8_encode( chr( $code ) ) . '|';
            $accents = rtrim( $accents , '|' );
            $change[ $key ] = $accents . ')/';
        endforeach;


        return preg_replace(
            array_values( $change ), array_keys( $change ), $string
        );
}

 

Obrigado pela resposta!

Eu não quero remover os acentos, quero apenas pegar os caracteres ISO e transformá-los em UTF-8, e fazer isso em 4 variáveis seguidas.

 

sobre o erro de sintaxe, é devido à falta de ponto-e-vírgula no final de cada chamada.

 

 

sobre a dúvida principal, dê uma olhada neste link:

http://stackoverflow.com/a/1401716

 

Usei essa função para importar um banco ISO para um novo banco, todo em UTF-8

Obrigado pela resposta!

Vou testar essa função que você me passou o link. Só achei um pouco complexo de entender.

Você saberia me dizer se tem essa função de todos enconding para UTF-8?

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.