Jump to content
Jack Oliveira

[Resolvido] Função para formatar URL

Recommended Posts

Ola pessoal boa noite

 

Bom pessoal estou fazendo uma função para formatar url de rede social,

FACEBOOK, INSTAGRAM & TWITTER, não sei se esta da forma correta em fazer.

Ex: https://www.facebook.com/minha-pagina   quero pegar apenas o final que seria minha-pagina 

Isso seria tanto no instagram e twitter

 

Fiz da seguinte forma

<?php
	function FormatarUrlRedeSocial($URL){
        if (strstr($URL, 'https://facebook.com/') || strstr($URL, 'http://facebook.com/')) {
            $UrlRedeSocial = explode('facebook.com/', $URL);
            return $UrlRedeSocial[1];
        } elseif (strstr($URL, 'http://') || strstr($URL, 'https://')){
            $UrlRedeSocial = explode($URL);
            $UrlRedeSocial = explode($UrlRedeSocial[1]);
            return $UrlRedeSocial[0];
        } else {
            return $URL;
        }
    }
?>

Porem quero que seja apenas uma função unica para todos 

Tipo

https://www.facebook.com/<?= FormatarUrlRedeSocial($dados['url_facebook']); ?>

https://www.instagram.com/<?= FormatarUrlRedeSocial($dados['url_instagram']); ?>

https://www.twitter.com/<?= FormatarUrlRedeSocial($dados['url_twitter']); ?>

 

Bom do porque não usar os link´s direto, bom pois em outras parte que vou pegar este nome no final não poderia ter o link completo

Então decide fazer uma função onde não vou precisar criar vários campos na tabela sem necessidades. Espero que possam entender o que preciso.

 

Se puder da uma ajuda fico grato...

Share this post


Link to post
Share on other sites

Olá @Jack Oliveira, tudo bem?

 

Vou lhe apresentar uma função bem legal do PHP, a parse_url:

<?php
$url1 = 'https://www.facebook.com/gilberto.gil';
$url2 = 'https://instagram.com/gilberto.gil/posts';
$url3 = 'https://twitter.com/gilberto.gil?parametro_qualquer=123';

$parsed_url1 = parse_url( $url1 );
$parsed_url2 = parse_url( $url2 );
$parsed_url3 = parse_url( $url3 );

print_r( $parsed_url1 );
print_r( $parsed_url2 );
print_r( $parsed_url3 );

Saída:

Array
(
    [scheme] => https
    [host] => www.facebook.com
    [path] => /gilberto.gil
)
Array
(
    [scheme] => https
    [host] => instagram.com
    [path] => /gilberto.gil/posts
)
Array
(
    [scheme] => https
    [host] => twitter.com
    [path] => /gilberto.gil
    [query] => parametro_qualquer=123
)

 

Massa né?

 

Bom, assim facilita bastante pra pegar o usuário. Basta pegar o path, retirar a primeira barra e cortar a partir da próxima barra. Algo assim:

<?php
function getSocialUser( $uri ) {
    $parsed = parse_url( $uri );
    $path = $parsed[ 'path' ];// Usuário, mas com caracteres que devem ser filtrados
    
    $host = str_replace( 'www.', '', $parsed[ 'host' ] );// Retiramos o 'www.'
    $host_name = explode( '.', $host )[ 0 ];// Separamos por '.' e pegamos a primeira parte
    
    $allowed_hosts = [ 'twitter', 'facebook', 'instagram' ];// Hosts permitidos
    if ( !in_array( $host_name, $allowed_hosts ) )
        return false;// Se não estiver entre os permitidos, retorne falso (ou exception)
    
    return strtok( ltrim( $path, '/' ), '/' );// retorna o usuário filtrado
}

$url1 = 'https://www.facebook.com/gilberto.gil';
$url2 = 'http://instagram.com/gilberto.gil/posts';
$url3 = 'https://twitter.com/gilberto.gil?parametro_qualquer=123';
$url4 = 'https://google.com/gilberto.gil?parametro_qualquer=123';

echo ( getSocialUser( $url1 ) ?: 'Inválido' ) . "\n";
echo ( getSocialUser( $url2 ) ?: 'Inválido' ) . "\n";
echo ( getSocialUser( $url3 ) ?: 'Inválido' ) . "\n";
echo ( getSocialUser( $url4 ) ?: 'Inválido' ) . "\n";

Saída:

gilberto.gil
gilberto.gil
gilberto.gil
Inválido

Observe que os testes contemplam exemplos com http, https, parâmetros arbitrários, url com caminho excedente, com www e sem www.

 

Veja esse código rodando: https://3v4l.org/Uib0j

Share this post


Link to post
Share on other sites
9 minutos atrás, Matheus Tavares disse:

Olá @Jack Oliveira, tudo bem?

 

Vou lhe apresentar uma função bem legal do PHP, a parse_url:


<?php
$url1 = 'https://www.facebook.com/gilberto.gil';
$url2 = 'https://instagram.com/gilberto.gil/posts';
$url3 = 'https://twitter.com/gilberto.gil?parametro_qualquer=123';

$parsed_url1 = parse_url( $url1 );
$parsed_url2 = parse_url( $url2 );
$parsed_url3 = parse_url( $url3 );

print_r( $parsed_url1 );
print_r( $parsed_url2 );
print_r( $parsed_url3 );

Saída:


Array
(
    [scheme] => https
    [host] => www.facebook.com
    [path] => /gilberto.gil
)
Array
(
    [scheme] => https
    [host] => instagram.com
    [path] => /gilberto.gil/posts
)
Array
(
    [scheme] => https
    [host] => twitter.com
    [path] => /gilberto.gil
    [query] => parametro_qualquer=123
)

 

Massa né?

 

Bom, assim facilita bastante pra pegar o usuário. Basta pegar o path, retirar a primeira barra e cortar a partir da próxima barra. Algo assim:


<?php
function getSocialUser( $uri ) {
    $parsed = parse_url( $uri );
    $path = $parsed[ 'path' ];// Usuário, mas com caracteres que devem ser filtrados
    
    $host = str_replace( 'www.', '', $parsed[ 'host' ] );// Retiramos o 'www.'
    $host_name = explode( '.', $host )[ 0 ];// Separamos por '.' e pegamos a primeira parte
    
    $allowed_hosts = [ 'twitter', 'facebook', 'instagram' ];// Hosts permitidos
    if ( !in_array( $host_name, $allowed_hosts ) )
        return false;// Se não estiver entre os permitidos, retorne falso (ou exception)
    
    return strtok( ltrim( $path, '/' ), '/' );// retorna o usuário filtrado
}

$url1 = 'https://www.facebook.com/gilberto.gil';
$url2 = 'http://instagram.com/gilberto.gil/posts';
$url3 = 'https://twitter.com/gilberto.gil?parametro_qualquer=123';
$url4 = 'https://google.com/gilberto.gil?parametro_qualquer=123';

echo ( getSocialUser( $url1 ) ?: 'Inválido' ) . "\n";
echo ( getSocialUser( $url2 ) ?: 'Inválido' ) . "\n";
echo ( getSocialUser( $url3 ) ?: 'Inválido' ) . "\n";
echo ( getSocialUser( $url4 ) ?: 'Inválido' ) . "\n";

Saída:


gilberto.gil
gilberto.gil
gilberto.gil
Inválido

Observe que os testes contemplam exemplos com http, https, parâmetros arbitrários, url com caminho excedente, com www e sem www.

 

Veja esse código rodando: https://3v4l.org/Uib0j

Boa noite @Matheus Tavares obrigado.....

 

Funcionou como precisava vlw mesmo....

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

  • Similar Content

    • By Caio Vargas
      Fala pessoal tudo bem
      Estou criando um site para o cliente e ele me pediu para colocar um tradutor ao clicar nas bandeiras
      porem eu nao queria fazer uma pagina para cada traduçao eu queria fazer tipo usando o google Translate 
       
      alguem tem alguma sugetao de como posso fazer ou um exemplo 
      grato
    • By Kelven
      Bom dia pessoal tudo bem?
      Então, estou trabalhando em um site em php e preciso usar a api do facebook para obter o feed do instagram, porém a chave token é um conteúdo muito sensível, então decidi fazer em php para ela não ficar disponível do lado do cliente. Alguém sabe me dizer se é possível fazer isso? Porque eu pesquisando no google só achei maneiras de fazer em javascript.
    • By gersonab
      Boa noite, tenho pesquisado porém não encontrei, então vamos lá.
      tenho uma lista de itens ( documentos ) cadastrados no banco de dados e os seus respectivos arquivos em uma pasta, se eu preciso de um deles clico e faço o download deste, no entanto como fazer para fazer o download de vários ao selecionar com checkbox os que eu quero ?
      desculpem por não postar nenhum código, mas é que não estou sabendo como fazer os downloads de vários.
      Qual o procedimento correto ?
       
    • By Willian Simione
      Estou com duas tabelas onde  uma eu somo o km de cada carro, e outra que eu somo a quantidade de litragem abastcido, porem tem carro que não abastece na garagem e na hora d eeu mostrar  a media por carro abastecido ele acaba entrando no somatório e é onde da o erro Warning: Division by zero in, como faço pra fazer essa soma e excluir os carro que não estao com o abastecimento.Abaido deixo as tabelas
       
      Esse soma o KM , todos os carro tem KM
       $soma4 = $conectar->query("SELECT SUM(tkm) AS total FROM cad_km where carro='$carro'");
         $count4 = $soma4->fetchColumn();
      Esse soma a Litragem, porem o tem carro que não abastece, 
         $soma3 = $conectar->query("SELECT round(SUM(litros),0) AS total FROM cad_abastec where dtabastec BETWEEN '$data1' AND '$data2' and carro='$carro'");
         $count3 = $soma3->fetchColumn();
       

       
    • By Mauricio Molina
      Bom dia.
       
      Estou precisando de um freelancer em PHP.
       
      Resolver um problema em um script de portal de noticias, onde a imagem não esta sendo upada, fica apenas em "em processamento".
       
      Contato: contato@weblina.com.br
       
      Obrigado!

×

Important Information

Ao usar o fórum, você concorda com nossos Terms of Use.