La rimozione di contenuti da inizio e fine della stringa (PHP)
-
27-09-2019 - |
Domanda
Sto cercando di ottenere un ID utenti da una stringa come ad esempio:
http://www.abcxyz.com/123456789/
Per apparire 123456789 essenzialmente nudo le informazioni fino al primo / e rimuovendo anche la fine /. Ho avuto uno sguardo in giro sulla rete, ma sembra che ci sia così tante soluzioni, ma niente di risposta sia di inizio e fine.
Grazie:)
Aggiorna 1
Il link può assumere due forme: mod_rewrite come sopra e anche "http://www.abcxyz.com/profile?user_id=123456789"
Soluzione
I userebbe parse_url()
per estrarre in modo pulito il componente del percorso dall'URL:
$path = parse_URL("http://www.example.com/123456789/", PHP_URL_PATH);
e quindi dividere il percorso nei suoi elementi utilizzando explode()
:
$path = trim($path, "/"); // Remove starting and trailing slashes
$path_exploded = explode("/", $path);
e uscita quindi il primo componente del percorso:
echo $path_exploded[0]; // Will output 123456789
questo metodo funzionerà in casi limite come
-
http://www.example.com/123456789?test
-
http://www.example.com//123456789
-
www.example.com/123456789/abcdef
e anche
-
/123456789/abcdef
Altri suggerimenti
$string = 'http://www.abcxyz.com/123456789/';
$parts = array_filter(explode('/', $string));
$id = array_pop($parts);
Se l'ID è sempre l'ultimo membro del URL
$url="http://www.abcxyz.com/123456789/";
$id=preg_replace(",.*/([0-9]+)/$,","\\1",$url);
echo $id;
Se non ci sono altri numeri nell'URL, si può anche fare
echo filter_var('http://www.abcxyz.com/123456789/', FILTER_SANITIZE_NUMBER_INT);
per togliere tutto ciò che non è una cifra.
Questo potrebbe essere un po 'più veloce di utilizzare il + combinazione di parse_url
parse_str
.
Se il dominio non contiene numeri, è in grado di gestire entrambe le situazioni (con o senza user_id) utilizzando:
<?php
$string1 = 'http://www.abcxyz.com/123456789/';
$string2 = 'http://www.abcxyz.com/profile?user_id=123456789';
preg_match('/[0-9]+/',$string1,$matches);
print_r($matches[0]);
preg_match('/[0-9]+/',$string2,$matches);
print_r($matches[0]);
?>