Estoy usando PHP para construir la URL de la página actual. A veces, las URL en forma de
www.mydomian.com/myurl.html?unwantedthngs
son solicitados. Quiero eliminar el ?
y todo lo que le sigue (cadena de consulta), de modo que la URL resultante se convierta en:
www.mydomain.com/myurl.html
Mi código actual es 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
fuente
fuente
Respuestas:
Puede usar
strtok
para obtener cadena antes de la primera aparición de?
strtok()
representa la técnica más concisa para extraer directamente la subcadena antes?
de la cadena de consulta.explode()
es menos directo porque debe producir una matriz potencialmente de dos elementos mediante la cual se debe acceder al primer elemento.Algunas otras técnicas pueden romperse cuando falta la cadena de consulta o potencialmente mutar otras subcadenas no deseadas en la url; estas técnicas deben evitarse.
Una demostración :
Salida:
fuente
array_shift(explode('?',$_SERVER["REQUEST_URI"]))
?
no está presente.Use PHP Manual - parse_url () para obtener las partes que necesita.
Editar (ejemplo de uso para @Navi Gamage)
Puedes usarlo así:
Editar (segundo ejemplo completo):
Se actualizó la función para asegurarse de que se adjuntará el esquema y no aparecerá ningún mensaje de aviso:
Volveremos:
Este es el resultado de pasar URL de ejemplo a través de parse_url () sin un segundo parámetro (solo para explicación).
Y este es el resultado final después de construir la URL usando:
Salida:
fuente
mejor solución:
No es necesario incluir su http://dominio.com en su si envía un formulario al mismo dominio.
fuente
fuente
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, "?")); } return $ pageURL; }?>code
La forma más fácil
fuente
Necesitará al menos PHP Versión 5.4 para implementar esta solución sin explotar en una variable en una línea y concatenando en la siguiente, pero un revestimiento sencillo sería:
Variables del servidor: http://php.net/manual/en/reserved.variables.server.php
Desferencia de matriz: https://wiki.php.net/rfc/functionarraydereferencing
fuente
Puede usar la función parse_url build in así:
fuente
Puedes probar:
fuente
Si desea obtener la ruta de solicitud ( más información ):
Si desea eliminar la consulta y (y quizás fragmentar también):
fuente
Para eliminar la cadena de consulta del URI de solicitud, reemplace la cadena de consulta con una cadena vacía:
fuente
www.example.com/myurl.html?
.Debido a que trato con URLs relativas y absolutas, actualicé la solución de veritas como el código a continuación.
Puedes probarlo aquí: https://ideone.com/PvpZ4J
fuente
también podría usar el siguiente según el comentario manual de php
Tenga en cuenta que esto solo funciona para ciertos entornos PHP y siga el comentario de abajo de esa página para obtener más información;
fuente
Prueba esto
fuente
Suponiendo que todavía desea obtener la URL sin los argumentos de consulta (si no están configurados), solo use una instrucción abreviada if para verificar con
strpos
:fuente
Aquí hay una solución simple si está utilizando Laravel:
fuente
Prueba esto:
o
fuente