Ir para conteúdo
Fórum Script Brasil
  • 0

Serialization + rawurlencode


edudebom

Pergunta

Estou usando o seguinte para passar para outra página:

header ('location: ../../servidor.php?s=form&msg='.rawurlencode(serialize($msg)));
Tenho a seguinte função que é peguei na net e funcionou beleza no Wamp
function checkSerialization($string, &$errmsg) {
        $str = 's';
        $array = 'a';
        $integer = 'i';
        $any = '[^}]*?';
        $count = '\d+';
        $content = '"(?:\\\";|.)*?";';
        $open_tag = '\{';
        $close_tag = '\}';
        $parameter = "($str|$array|$integer|$any):($count)" . "(?:[:]($open_tag|$content)|[;])";
        $preg = "/$parameter|($close_tag)/";
        if(!preg_match_all($preg, $string, $matches)) {
            $errmsg = 'not a serialized string';
            return false;
        }
        $open_arrays = 0;
        foreach($matches[1] as $key => $value) {
            if(!empty($value) && ($value != $array xor $value != $str xor $value != $integer)) {
                $errmsg = 'undefined datatype';
                return false;
            }
            if($value == $array) {
                $open_arrays++;
                if($matches[3][$key] != '{') {
                    $errmsg = 'open tag expected';
                    return false;
                }
            }
            if($value == '') {
                if($matches[4][$key] != '}') {
                    $errmsg = 'close tag expected';
                    return false;
                }
                $open_arrays--;
            }
            if($value == $str) {
                $aVar = ltrim($matches[3][$key], '"');
                $aVar = rtrim($aVar, '";');
                if(strlen($aVar) != $matches[2][$key]) {
                    $errmsg = 'stringlen for string not match';
                    return false;
                }
            }
            if($value == $integer) {
                if(!empty($matches[3][$key])) {
                    $errmsg = 'unexpected data';
                    return false;
                }
                if(!is_integer((int)$matches[2][$key])) {
                    $errmsg = 'integer expected';
                    return false;
                }
            }
        }
        if($open_arrays != 0) {
            $errmsg = 'wrong setted arrays';
            return false;
        }
        return true;
    }
E uso o seguinte para exibir na página final:
$erro = false;
                    $msg = isset($_GET['msg']) ? rawurldecode($_GET['msg']) : false;
                    $msg = checkSerialization($msg, $erro) ? unserialize($msg) : '<p class="msg">'.$msg.'</p>';
                    if(is_array($msg)) {
                        $msgList = '<ul>';
                        foreach($msg as $item)
                            $msgList.= '<li class="msg">'.$item.'</li>';
                        $msgList.= '</ul>';
                        $msg = $msgList;
                    }
                    print $msg;

No navegador exibe algo tipo

Você deve digitar o nome

Você deve digitar a senha

Isto no Wamp Server, porém testei onde hospedo e não funcionou normalmente. Neste, aparece algo tipo "a:6:{i:0;s:33:\"Você deve preencher o campo Nome.\";i:1;s:32:\"" mas no meu print $msg;

Link para o comentário
Compartilhar em outros sites

1 resposta a esta questão

Posts Recomendados

  • 0

Mais algumas informacoes:

Num teste, a string:

a:6:{i:0;s:33:\"Você deve preencher o campo Nome.\";i:1;s:32:\"Você deve preencher o campo CPF.\";i:2;s:35:\"Você deve preencher o campo E-mail.\";i:3;s:34:\"Você deve preencher o campo Senha.\";i:4;s:36:\"Você deve selecionar o cargo funcao.\";i:5;s:34:\"Você deve preencher o campo login.\";}

Tem como erro da funcao checkSerialization o seguinte: 'undefined datatype';

Link para o comentário
Compartilhar em outros sites

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,2k
    • Posts
      652k
×
×
  • Criar Novo...