Ir para conteúdo

Arquivado

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

Adler Liefde

Como ler parte de um url com PHP?

Recommended Posts

Olá, pessoal. Estou com uma dúvida, pesquisei aqui no fórum, mas, a busca não pareceu mostrar alguém com a mesma dúvida que eu.

Enfim...

Estou desenvolvendo um site em três idiomas, português, inglês e espanhol. Eu queria que toda vez que o endereço estivesse www.enderecodosite.com.br/en o site ficasse em inglês... ou se estivesse www.enderecodosite.com.br/es ficasse em espanhol. Até aí tudo bem, pesquisando no google encontrei uma forma de ler a url da página. Eu acrescentava um if na página e bingo! Funcionou.

if ($endereco == "www.enderecodosite.com.br/en"){
    echo "Site em inglês"
}

O problema foi quando o endereço do site não era mais apenas www.enderecodosite.com.br/en e sim www.enderecodosite.com.br/en/alguma-noticia-do-site Aí o parâmetro do meu if não era aceito... já que tinha algo a mais além do /en. Eu queria saber se tem como, ler apenas parte da URL, ou seja. ler até www.enderecodosite.com.br/en e ignorar o que vem depois, apenas para que eu possa mudar o conteúdo relativo ao idioma do site.

Grato a quem se dispor a me ajudar.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Com essa função ele selecionará os caracteres de 0 a 28 da string, que no caso ficaria "www.enderecodosite.com.br/en"


$parte = substr($endereco, 0, 28);

if ($parte == "www.enderecodosite.com.br/en"){
    echo "Site em inglês"
}

Compartilhar este post


Link para o post
Compartilhar em outros sites

Mesmo com o parse url, precisará do explode.

 

O código:

$dados = parse_url('http://www.site.com.br/en/teste.html');

Retorna:

Array
(
    [scheme] => http
    [host] => www.site.com.br
    [path] => /en/teste.html
)

Para pegar o idioma precisará:

$dados = parse_url('http://www.site.com.br/en/teste.html');

$parte = explode('/', $dados['path']);
$idioma = $parte[1]; 

if($idioma == 'en'): // ou switch se preferir
    /* ... */
endif;

Compartilhar este post


Link para o post
Compartilhar em outros sites

Mesmo com o parse url, precisará do explode.

Como assim precisará de explode? Por isso eu disse sem gambiarras!

 

Leia o manual amigo, e não tire decisões precipitadas.

 

Veja um exemplo

<?php

$address = 'http://www.enderecodosite.com.br/en';
$parsed_url = parse_url($address);
echo $parsed_url['path'];

Neste caso, prefiram explode. :assobiando:

:assobiando:

Compartilhar este post


Link para o post
Compartilhar em outros sites

Claro... é visível que ele devolve o array, porém... ele vai precisar do explode pra pegar só o EN, pelo menos é o que eu to entendendo que ele quer né.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Como assim precisará de explode? Por isso eu disse sem gambiarras!

 

Leia o manual amigo, e não tire decisões precipitadas.

 

Veja um exemplo

<?php

$address = 'http://www.enderecodosite.com.br/en';
$parsed_url = parse_url($address);
echo $parsed_url['path'];

:assobiando:

 

 

Bom... segundo a necessidade do Adler Liefde, haverão os seguintes casos:

 

http://site/en

http://site/en/

http://site/en/pagina-tal.html

http://site/en/secao/pagina-tal.html

 

Da forma que você postou, não resolveria... (resolveria apenas nos dois primeiros casos)

 

Por isso postei que necessitará do explode (há soluções alternativas, mas sugeri o explode).

 

 

 

Assim como eu posso ler mais o manual do PHP, você poderia interpretar melhor a necessidade do usuário.

Compartilhar este post


Link para o post
Compartilhar em outros sites

#10

 

Eu particularmente não criaria uma dispatch() e usaria essa função "explode", e como eu já tinha lido antes de você editar, ai sim concordo que existe funções melhores e não alternativa para a explode. vide post #3 e #4

 

Independe da url for:

 

http://site/en

http://site/en/

http://site/en/pagina-tal.html

http://site/en/secao/pagina-tal.html

Mas fico por aqui, porque necessidade existe variados contextos, por isso sempre posto links do manual, cabe a pessoa estudar. :kiss:

Compartilhar este post


Link para o post
Compartilhar em outros sites

o site sempre vai estar com o ".com.br/"?

 

se sim

 

 

<?php
 
$endereco='https://www.enderecodosite.com.br/en/pagina-html';
preg_match('/(?:https?:\/\/)?.+\.com\.br\/(\w+)\/?/i',$endereco,$match);
switch($match[1]) {
   case 'en':
     echo "Site em ingles";
     break;
     case 'pt':
       echo "Site em Portugues de portugal";
       break;
       case 'br':
         echo "Site em Portugues do Brasil";
         break;
         default:
           echo "Nao foi possivel encontrar idioma do site";
}


?>

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.