Erro em Comparação de Strings Identicas
Boa tarde pessoal,
Sou novo aqui no fórum e preciso de uma ajuda meio urgente!
Vou explicar o que estou desenvolvendo para que vocês entendam melhor:
- Estou recuperando dados de um site externo via cURL para o sistema de um cliente, onde é informado um nome para ser consultado;
- Ao receber a resposta da página requisitada eu percorro toda ela e recupero os dados necessários;
- Esses dados recuperados eu vou inserindo em um array para depois exibi-los em tela por intermédio de um laço qualquer, porém para inserir os dados dentro do array eu preciso fazer uma comparação entre o nome que foi consultado e os nomes recuperados na página retornada pelo cURL. É nesse ponto que está o problema!! Mesmo que o nome consultado seja exatamente igual ao retornado, inclusive em termos de case (maiúsculas e minúsculas) as funções do PHP que utilizei para comparação (preg_match, stristr, stripos) retornam sempre falso, por exmplo: Digamos que foi pesquisado o nome "JOÃO SILVA" e na página retornada também seja encontrado um nome "JOÃO SILVA", porém quando os dois são comparados é retornado FALSE, como se as strings não fossem iguais.
OBS.1: Utilizo trim() em ambos os nomes (consultado e retornado) para retirar os espaços em branco.
OBS.2: Utilizo utf8_encode() no nome retornado, pois este vem em outra codificação.
OBS.3: Já tentei compara também utilizando == e ===, mas também retornou falso.
OBS.4: Já tentei alterar a codificação do nome retornado pelo cURL com a função mb_convert_encoding(), mas também não obtive sucesso. Utilizei a mb_detect_encoding() para detectar o encoding do nome retornado e me trouxe ASCII como resposta.
OBS.5: Já verifiquei se o nome não estava sendo retornado com codificação HTML (ã, á, etc.), não está.
Segue o código onde recupero o nome encontrado e realizo a comparação:
...
// * Recupera o texto referente ao nome da pessoa
preg_match('/>[\w\s\/\[\]\(\){}|!"\':;.#$%=+*-]+<\/td>/i', $_retorno, $captura);
preg_match('/[\w\s\/\[\]\(\){}|!"\':;.#$%=+*-]+/i', $captura[0], $captura);
// * Verifica se o texto foi encontrado
if (!empty($captura[0]))
{
/* Realiza a formatação do nome encontrado */
$nome_encontrado = utf8_encode(trim($captura[0]));
$nome_encontrado = preg_replace('/ E OUTROS?/i', '', $nome_encontrado);
$nome_encontrado = preg_replace('/\.{1,}$/i', '', $nome_encontrado);
$nome_encontrado = preg_replace('/\//i', '\/', $nome_encontrado);
if (!empty($nome_encontrado) && preg_match('/'.$nome_encontrado.'/i', $_nome_consultado))
{
$nome_encontrado = true;
}
}
...
Alguém tem idéia do que possa ser?
Fico muito grato por quem puder me ajudar!
Obrigado.
Sou novo aqui no fórum e preciso de uma ajuda meio urgente!
Vou explicar o que estou desenvolvendo para que vocês entendam melhor:
- Estou recuperando dados de um site externo via cURL para o sistema de um cliente, onde é informado um nome para ser consultado;
- Ao receber a resposta da página requisitada eu percorro toda ela e recupero os dados necessários;
- Esses dados recuperados eu vou inserindo em um array para depois exibi-los em tela por intermédio de um laço qualquer, porém para inserir os dados dentro do array eu preciso fazer uma comparação entre o nome que foi consultado e os nomes recuperados na página retornada pelo cURL. É nesse ponto que está o problema!! Mesmo que o nome consultado seja exatamente igual ao retornado, inclusive em termos de case (maiúsculas e minúsculas) as funções do PHP que utilizei para comparação (preg_match, stristr, stripos) retornam sempre falso, por exmplo: Digamos que foi pesquisado o nome "JOÃO SILVA" e na página retornada também seja encontrado um nome "JOÃO SILVA", porém quando os dois são comparados é retornado FALSE, como se as strings não fossem iguais.
OBS.1: Utilizo trim() em ambos os nomes (consultado e retornado) para retirar os espaços em branco.
OBS.2: Utilizo utf8_encode() no nome retornado, pois este vem em outra codificação.
OBS.3: Já tentei compara também utilizando == e ===, mas também retornou falso.
OBS.4: Já tentei alterar a codificação do nome retornado pelo cURL com a função mb_convert_encoding(), mas também não obtive sucesso. Utilizei a mb_detect_encoding() para detectar o encoding do nome retornado e me trouxe ASCII como resposta.
OBS.5: Já verifiquei se o nome não estava sendo retornado com codificação HTML (ã, á, etc.), não está.
Segue o código onde recupero o nome encontrado e realizo a comparação:
...
// * Recupera o texto referente ao nome da pessoa
preg_match('/>[\w\s\/\[\]\(\){}|!"\':;.#$%=+*-]+<\/td>/i', $_retorno, $captura);
preg_match('/[\w\s\/\[\]\(\){}|!"\':;.#$%=+*-]+/i', $captura[0], $captura);
// * Verifica se o texto foi encontrado
if (!empty($captura[0]))
{
/* Realiza a formatação do nome encontrado */
$nome_encontrado = utf8_encode(trim($captura[0]));
$nome_encontrado = preg_replace('/ E OUTROS?/i', '', $nome_encontrado);
$nome_encontrado = preg_replace('/\.{1,}$/i', '', $nome_encontrado);
$nome_encontrado = preg_replace('/\//i', '\/', $nome_encontrado);
if (!empty($nome_encontrado) && preg_match('/'.$nome_encontrado.'/i', $_nome_consultado))
{
$nome_encontrado = true;
}
}
...
Alguém tem idéia do que possa ser?
Fico muito grato por quem puder me ajudar!
Obrigado.
comentários (0)
suspender