Função PHP Estranha no Laravel

Boa noite.
Por que esta função retorna caracteres não imprimíveis no Laravel Framework 5.7.21?
https://drive.google.com/open?id=1f1IPqW6-liWwFRwcywXclD4NOibmi2Z5U8fvtZG3854

provavelmente ocorre um erro de encoding.

o laravel trabalha com funções multibyte, se você usa a função simples deve estar quebrando as strings incorretamente.

possível solução: trocar a função substr por mb_substr.

1 curtida

Mesma coisa.

Primeiro, isso não é coisa do Laravel, não é função do Laravel, não é código do Laravel isso foi feito ou por você ou por alguém.

Porque retornar caracteres com problemas?
Tem que analisar a função e verificar o que ela está fazendo, criar um checklist de possíveis problemas e fazer a manutenção do código.

Você deveria citar exemplos do que fez e o que a função deu como resposta para uma maior analise!

acho que resolvi aqui. o problema é mesmo nas strings multibyte mas não apenas na função substr, o problema também está na função str_shuffle.

encontrei esse código para uma função mb_str_shuffle com multibyte em coreano, testei ela no Laravel 5.8.7 com utf-8 e tudo funcionou corretamente:

    function gerar_senha($tamanho, $maiusculas, $minusculas, $numeros, $simbolos){
        $ma = "ABCDEFGHIJKLMNOPQRSTUVYXWZ"; // $ma contem as letras maiúsculas
        $mi = "abcdefghijklmnopqrstuvyxwz"; // $mi contem as letras minusculas
        $nu = "0123456789"; // $nu contem os números
        $si = "!@#$%¨&*()_+="; // $si contem os símbolos
        $senha = '';
        if ($maiusculas){
            // se $maiusculas for "true", a variável $ma é embaralhada e adicionada para a variável $senha
            $senha .= $this->mb_str_shuffle($ma);
        }
        if ($minusculas){
            // se $minusculas for "true", a variável $mi é embaralhada e adicionada para a variável $senha
            $senha .= $this->mb_str_shuffle($mi);
        }
        if ($numeros){
            // se $numeros for "true", a variável $nu é embaralhada e adicionada para a variável $senha
            $senha .= $this->mb_str_shuffle($nu);
        }
        if ($simbolos){
            // se $simbolos for "true", a variável $si é embaralhada e adicionada para a variável $senha
            $senha .= $this->mb_str_shuffle($si);
        }
        // retorna a senha embaralhada com "$this->mb_str_shuffle" com o tamanho definido pela variável $tamanho
        return mb_substr($this->mb_str_shuffle($senha),0,$tamanho);
    }
    function mb_str_shuffle($str){
        $ret = array();
        for ($i=0; $i<mb_strlen($str, "utf-8"); $i++){
            array_push($ret, mb_substr($str, $i, 1, "utf-8"));
        }
        shuffle($ret);
        return join($ret);
    }
1 curtida

Quero te dar uma dica, ao invés de fazer esse tipo de comentário, como falar que não é função do Laravel, sendo que por ser um framework PHP, temos a liberdade de usar funções PHP, até porque num Controller pra citar um exemplo, não tem como usar somente funções do Laravel, você deveria fazer igual seu colega, apontar a solução.

Quero te dar um dica de verdade, não estamos aqui para adivinhar, você precisa colocar perguntas que tenha fundamento e que tenha contexto, não estamos aqui para adivinhar, estamos aqui para ajudar, o problema que as suas perguntas precisam melhorar o contexto e a forma de indicar problemas, o que eu disse é para ajudar você a entender que suas perguntas muitas vezes não são referentes a duvida em si, arrumar código sem saber a sua saída é também bastante complicado.

Não estou aqui para ser um apontador de solução e estou aqui para ajudar a uma solução, fazer um código sem saber o que realmente precisa é pra mim o maior complicador para si mesmo.

Quem define se sua dica é de verdade é você mesmo, a minha dica, eu chamei apenas de dica. Não há definição padronizada que possa provar se minhas dúvidas são sem contexto. Pra quem não é capaz de entender o que relato, só se eu escrever um livro. Se você é um desse, peço que nem se intrometa nos meus posts.
Se o que relato é difícil de entender, como explicar que com apenas 2 ou 3 respostas, o colega achou a solução?
Você me parece ter uma dificuldade em interpretar textos, mas se o problema for com os meus, favor nem se preocupar em responder.

Aqui é um fórum aberto e eu posso ajudar e isso você não pode reinvindicar de quem pode te ajudar.

Mas se acha que suas perguntas tem contexto tudo bem na há problemas mas na vida só há crescimento quando se deseja aprender e com Laravel, PHP e .NET eu posso ajudar.

Não deseja que meus posts são prejudiciais faça o seguinte ignore e siga em frente.