php - method - ¿Cómo eliminar la cadena de consulta y obtener solo la url?
php parameters string (12)
Debido a que trato con URLs absolutas y relativas, actualicé la solución de Veritas como el código a continuación.
Puedes probarlo aquí: https://ideone.com/PvpZ4J
function removeQueryStringFromUrl($url) {
if (substr($url,0,4) == "http") {
$urlPartsArray = parse_url($url);
$outputUrl = $urlPartsArray[''scheme''] . ''://'' . $urlPartsArray[''host''] . ( isset($urlPartsArray[''path'']) ? $urlPartsArray[''path''] : '''' );
} else {
$URLexploded = explode("?", $url, 2);
$outputUrl = $URLexploded[0];
}
return $outputUrl;
}
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 (querystring), 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;
}
?>
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:
$_SERVER["HTTP_HOST"].explode(''?'', $_SERVER["REQUEST_URI"], 2)[0];
Variables del servidor: http://php.net/manual/en/reserved.variables.server.php
Eliminación de matrices: https://wiki.php.net/rfc/functionarraydereferencing
Para eliminar la cadena de consulta del URI de solicitud, reemplace la cadena de consulta con una cadena vacía:
function request_uri_without_query() {
$result = $_SERVER[''REQUEST_URI''];
$query = $_SERVER[''QUERY_STRING''];
if(!empty($query)) {
$result = str_replace(''?'' . $query, '''', $result);
}
return $result;
}
Prueba esto
$url_with_querystring = ''www.mydomian.com/myurl.html?unwantedthngs'';
$url_data = parse_url($url_with_querystring);
$url_without_querystring = str_replace(''?''.$url_data[''query''], '''', $url_with_querystring);
Prueba esto:
$urrl=$_SERVER[''HTTP_HOST''] . $_SERVER[''SCRIPT_NAME'']
o
$urrl=$_SERVER[''HTTP_HOST''] . $_SERVER[''PHP_SELF'']
Puede usar strtok
para obtener una cadena antes de la primera aparición de ?
$url=strtok($_SERVER["REQUEST_URI"],''?'');
Puedes probar:
<?php
$this_page = basename($_SERVER[''REQUEST_URI'']);
if (strpos($this_page, "?") !== false) $this_page = reset(explode("?", $this_page));
?>
Si desea obtener la ruta de solicitud ( más información ):
echo parse_url($_SERVER["REQUEST_URI"])[''path'']
Si desea eliminar la consulta y (y tal vez también fragmentar):
function strposa($haystack, $needles=array(), $offset=0) {
$chr = array();
foreach($needles as $needle) {
$res = strpos($haystack, $needle, $offset);
if ($res !== false) $chr[$needle] = $res;
}
if(empty($chr)) return false;
return min($chr);
}
$i = strposa($_SERVER["REQUEST_URI"], [''#'', ''?'']);
echo strrpos($_SERVER["REQUEST_URI"], 0, $i);
Use PHP Manual - parse_url () para obtener las piezas que necesita.
Editar (uso de ejemplo para @Navi Gamage)
Puedes usarlo así:
<?php
function reconstruct_url($url){
$url_parts = parse_url($url);
$constructed_url = $url_parts[''scheme''] . ''://'' . $url_parts[''host''] . $url_parts[''path''];
return $constructed_url;
}
?>
Editar (segundo ejemplo completo):
Función actualizada para asegurarse de que se adjuntará el esquema y que no aparezcan mensajes de aviso:
function reconstruct_url($url){
$url_parts = parse_url($url);
$constructed_url = $url_parts[''scheme''] . ''://'' . $url_parts[''host''] . (isset($url_parts[''path''])?$url_parts[''path'']:'''');
return $constructed_url;
}
$test = array(
''http://www.mydomian.com/myurl.html?unwan=abc'',
''http://www.mydomian.com/myurl.html'',
''http://www.mydomian.com'',
''https://mydomian.com/myurl.html?unwan=abc&ab=1''
);
foreach($test as $url){
print_r(parse_url($url));
}
Regresará:
Array
(
[scheme] => http
[host] => www.mydomian.com
[path] => /myurl.html
[query] => unwan=abc
)
Array
(
[scheme] => http
[host] => www.mydomian.com
[path] => /myurl.html
)
Array
(
[scheme] => http
[host] => www.mydomian.com
)
Array
(
[path] => mydomian.com/myurl.html
[query] => unwan=abc&ab=1
)
Este es el resultado de pasar urls de ejemplo a través de parse_url () sin segundo parámetro (solo para explicación).
Y este es el resultado final después de construir url usando:
foreach($test as $url){
echo reconstruct_url($url) . ''<br/>'';
}
Salida:
http://www.mydomian.com/myurl.html
http://www.mydomian.com/myurl.html
http://www.mydomian.com
https://mydomian.com/myurl.html
mejor solución:
echo parse_url($_SERVER[''REQUEST_URI''], PHP_URL_PATH);
No es necesario que incluya su http://dominio.com si envía un formulario al mismo dominio.
La forma más fácil
$url = ''https://www.youtube.com/embed/ROipDjNYK4k?rel=0&autoplay=1'';
$url_arr = parse_url($url);
$query = $url_arr[''query''];
print $url = str_replace(array($query,''?''), '''', $url);
//output
https://www.youtube.com/embed/ROipDjNYK4k
$val = substr( $url, 0, strrpos( $url, "?"));