Estou usando o PHP para criar o URL da página atual. Às vezes, URLs na forma de
www.mydomian.com/myurl.html?unwantedthngs
são solicitados. Quero remover ?
oe tudo o que se segue (querystring), para que o URL resultante se torne:
www.mydomain.com/myurl.html
Meu código atual é este:
<?php
function curPageURL() {
$pageURL = 'http';
if ($_SERVER["HTTPS"] == "on") {
$pageURL .= "s";
}
$pageURL .= "://";
if ($_SERVER["SERVER_PORT"] != "80") {
$pageURL .= $_SERVER["SERVER_NAME"] . ":" .
$_SERVER["SERVER_PORT"] . $_SERVER["REQUEST_URI"];
} else {
$pageURL .= $_SERVER["SERVER_NAME"] . $_SERVER["REQUEST_URI"];
}
return $pageURL;
}
?>
php
query-string
Navi Gamage
fonte
fonte
Respostas:
Você pode usar
strtok
para obter string antes da primeira ocorrência de?
strtok()
representa a técnica mais concisa para extrair diretamente a substring antes do?
na querystring.explode()
é menos direto porque deve produzir uma matriz de dois elementos potencialmente pela qual o primeiro elemento deve ser acessado.Algumas outras técnicas podem ser interrompidas quando a string de consulta estiver ausente ou potencialmente alterar outras substrings não desejadas no URL - essas técnicas devem ser evitadas.
Uma demonstração :
Resultado:
fonte
array_shift(explode('?',$_SERVER["REQUEST_URI"]))
?
não esteja presente.Use o Manual do PHP - parse_url () para obter as peças que você precisa.
Editar (exemplo de uso para @Navi Gamage)
Você pode usá-lo assim:
Editar (segundo exemplo completo):
Função atualizada para garantir que o esquema seja anexado e nenhuma mensagem de aviso seja exibida:
Retornará:
Esta é a saída do exemplo de transmissão de URLs através de parse_url () sem segundo parâmetro (apenas para explicação).
E este é o resultado final após a construção do URL usando:
Resultado:
fonte
melhor solução:
Não é necessário incluir seu http://domain.com no seu se você estiver enviando um formulário para o mesmo domínio.
fonte
fonte
code
<? Php function curPageURL () {$ pageURL = 'http'; if ($ _SERVER ["HTTPS"] == "on") {$ pageURL. = "s";} $ pageURL. = ": //"; if ($ _SERVER ["SERVER_PORT"]! = "80") {$ pageURL. = $ _SERVER ["SERVER_NAME"]. ":". $ _ SERVER ["SERVER_PORT"]. $ _ SERVER ["REQUEST_URI"]; } else {$ pageURL. = $ _SERVER ["SERVER_NAME"]. $ _ SERVER ["REQUEST_URI"]; $ pageURL = substr ($ pageURL, 0, strrpos ($ pageURL, "?")); } retornar $ pageURL; }?>code
Maneira mais fácil
fonte
Você precisará pelo menos da versão 5.4 do PHP para implementar esta solução sem explodir em uma variável em uma linha e concatenar na seguinte, mas um liner fácil seria:
Variáveis de servidor: http://php.net/manual/en/reserved.variables.server.php
Desreferenciação de matriz: https://wiki.php.net/rfc/functionarraydereferencing
fonte
Você pode usar a construção parse_url na função assim:
fonte
Podes tentar:
fonte
Se você deseja obter o caminho da solicitação ( mais informações ):
Se você deseja remover a consulta e (e talvez fragmentar também):
fonte
Para remover a string de consulta do URI da solicitação, substitua a string de consulta por uma string vazia:
fonte
www.example.com/myurl.html?
.Como trato de URLs relativos e absolutos, atualizei a solução da veritas como o código abaixo.
Você pode tentar aqui: https://ideone.com/PvpZ4J
fonte
também poderia usar o seguinte conforme o comentário manual do php
Observe que isso funciona apenas para determinados ambientes PHP e siga o comentário a seguir nessa página para obter mais informações;
fonte
Tente isto
fonte
Supondo que você ainda deseja obter a URL sem os argumentos da consulta (se eles não estiverem definidos), use apenas uma instrução shorthand if para verificar com
strpos
:fonte
Aqui está uma solução simples se você estiver usando o Laravel:
fonte
Tente o seguinte:
ou
fonte