Bagaimana cara mendapatkan parameter dari string URL?


197

Saya memiliki bidang formulir HTML yang $_POST["url"]memiliki beberapa string URL sebagai nilainya. Nilai contoh adalah:

https://example.com/test/1234?email=xyz@test.com
https://example.com/test/1234?basic=2&email=xyz2@test.com
https://example.com/test/1234?email=xyz3@test.com
https://example.com/test/1234?email=xyz4@test.com&testin=123
https://example.com/test/the-page-here/1234?someurl=key&email=xyz5@test.com

dll.

Bagaimana saya bisa mendapatkan hanya emailparameter dari URL / nilai ini?

Harap perhatikan bahwa saya tidak mendapatkan string ini dari bilah alamat browser.


Saya agak bingung, tolong jelaskan Q ...
— Dexter Huinda

Are you saying/asking for the URLs to be treated as strings?
— hjpotter92

If you want to "match" the email part from strings, like in your examples, use regular expressions. Could be as simple as /(email=\w\@\w\.\w)/ or more advanced matching techniques. Just giving you the idea. See preg_match function: php.net/manual/en/function.preg-match.php
— Dexter Huinda


Kemungkinan duplikat dari string URL permintaan URL
— jww

Jawaban:


414

Anda dapat menggunakan parse_url()dan parse_str()untuk itu.

$parts = parse_url($url);
parse_str($parts['query'], $query);
echo $query['email'];

Jika Anda ingin mendapatkan $urlPHP secara dinamis, lihat pertanyaan ini:

Dapatkan URL lengkap dalam PHP


2
ini berfungsi tetapi saya mendapatkan kesalahan dalam log seperti ini: Pemberitahuan PHP: Indeks tidak ditentukan: query
— Srinivas08

112

Semua parameter setelahnya ?dapat diakses menggunakan $_GETarray. Begitu,

echo $_GET['email'];

akan mengekstrak email dari url.


50
Ini bukan jawaban untuk pertanyaan itu, tetapi ini adalah jawaban yang saya cari ketika saya menanyakan pertanyaan kepada Google, jadi +1 menjawab Google dengan benar.
— BillyNair

1
Ini mungkin bukan jawaban untuk pertanyaan tetapi merupakan cara yang benar dan termudah untuk mendapatkan parameter URL - jika mereka diatur dengan benar: https://example.com?email=myemail@example.com $email = $_GET['email']; $email === 'myemail@example.com';
— CheddarMonkey

45

Gunakan metode parse_url () dan parse_str () . parse_url()akan mengurai string URL ke dalam array asosiatif dari bagian-bagiannya. Karena Anda hanya menginginkan satu bagian URL, Anda dapat menggunakan pintasan untuk mengembalikan nilai string hanya dengan bagian yang Anda inginkan. Selanjutnya, parse_str()akan membuat variabel untuk setiap parameter dalam string kueri. Saya tidak suka mencemari konteks saat ini, jadi memberikan parameter kedua menempatkan semua variabel ke dalam array asosiatif.

$url = "https://mysite.com/test/1234?email=xyz4@test.com&testin=123";
$query_str = parse_url($url, PHP_URL_QUERY);
parse_str($query_str, $query_params);
print_r($query_params);

//Output: Array ( [email] => xyz4@test.com [testin] => 123 ) 

8

Gunakan $_GET['email']untuk parameter dalam URL. Gunakan $_POST['email']untuk data yang diposting ke skrip. Atau gunakan _$REQUESTuntuk keduanya. Selain itu, seperti yang disebutkan, Anda dapat menggunakan parse_url()fungsi yang mengembalikan semua bagian URL. Gunakan bagian yang disebut 'permintaan' - di sana Anda dapat menemukan parameter email Anda. Info lebih lanjut: http://php.net/manual/en/function.parse-url.php


5
OP mengatakan dia tidak mendapatkan URL dari address bar. URL-URL ini hanya berupa strings INthe code.
— DavChana

7

Anda dapat menggunakan kode di bawah ini untuk mendapatkan alamat email setelah? dalam URL

<?php
if (isset($_GET['email'])) {
    echo $_GET['email'];
}


3
OP meminta mengekstraksi variabel dari string bukan URL di halaman saat ini. parse_url () adalah jawaban yang benar dengan asumsi string diformat dengan benar.
— Bloafer

6

Seperti disebutkan dalam jawaban lain, solusi terbaik adalah menggunakan

parse_url()

Anda perlu menggunakan kombinasi parse_url()dan parse_str().

The parse_url()URL mengurai dan kembali komponennya bahwa Anda bisa mendapatkan query string menggunakan querykunci. Maka Anda harus menggunakan parse_str()string kueri parse dan mengembalikan nilai ke dalam variabel.

$url = "https://example.com/test/1234?basic=2&email=xyz2@test.com";
parse_str(parse_url($url)['query'], $params);
echo $params['email']; // xyz2@test.com

Anda juga dapat melakukan pekerjaan ini menggunakan regex .

preg_match()

Anda dapat menggunakan preg_match()untuk mendapatkan nilai spesifik dari string kueri dari URL.

preg_match("/&?email=([^&]+)/", $url, $matches);
echo $matches[1]; // xyz2@test.com

preg_replace()

Anda juga dapat menggunakannya preg_replace()untuk melakukan pekerjaan ini dalam satu baris!

$email = preg_replace("/^https?:\/\/.*\?.*email=([^&]+).*$/", "$1", $url);
// xyz2@test.com

3

Saya membuat fungsi dari jawaban @Ruel . Anda bisa menggunakan ini:

function get_valueFromStringUrl($url , $parameter_name)
{
    $parts = parse_url($url);
    if(isset($parts['query']))
    {
        parse_str($parts['query'], $query);
        if(isset($query[$parameter_name]))
        {
            return $query[$parameter_name];
        }
        else
        {
            return null;
        }
    }
    else
    {
        return null;
    }
}

Contoh:

$url = "https://example.com/test/the-page-here/1234?someurl=key&email=xyz5@test.com";
echo get_valueFromStringUrl($url , "email");

Terima kasih kepada @Ruel


1
$uri = $_SERVER["REQUEST_URI"];
$uriArray = explode('/', $uri);
$page_url = $uriArray[1];
$page_url2 = $uriArray[2];
echo $page_url; <- see the value

Ini berfungsi baik untuk saya menggunakan php


1
Bisakah Anda mencoba menguraikan jawabannya lebih lanjut. Sulit untuk mendapatkan apa yang Anda maksud dengan jawaban di atas.
— Mustafa Ehsan Alokozay

1
$web_url = 'http://www.writephponline.com?name=shubham&email=singh@gmail.com';
$query = parse_url($web_url, PHP_URL_QUERY);
parse_str($query, $queryArray);

echo "Name: " . $queryArray['name'];  // Result: shubham
echo "EMail: " . $queryArray['email']; // Result:singh@gmail.com

1

Jawaban yang jauh lebih aman yang saya terkejut belum disebutkan di sini:

filter_input

Jadi, dalam hal pertanyaan, Anda dapat menggunakan ini untuk mendapatkan nilai email dari parameter dapatkan URL:

$email = filter_input( INPUT_GET, 'email', FILTER_SANITIZE_EMAIL );

Untuk jenis variabel lain, Anda ingin memilih filter yang berbeda / sesuai sepertiFILTER_SANITIZE_STRING .

Saya kira jawaban ini melakukan lebih dari apa yang ditanyakan oleh pertanyaan - mendapatkan data mentah dari parameter URL. Tetapi ini adalah pintasan satu baris yang hasilnya sama dengan ini:

$email = $_GET['email'];
$email = filter_var( $email, FILTER_SANITIZE_EMAIL );

Mungkin juga membiasakan meraih variabel dengan cara ini.


whooops, tidak melihat baris terakhir dari pertanyaan tentang tidak mendapatkan ini dari URL ... masih meninggalkan ini di sini kalau-kalau itu bermanfaat bagi siapa pun.
— squarecandy

0

Di Laravel, saya menggunakan:

private function getValueFromString(string $string, string $key)
{
    parse_str(parse_url($string, PHP_URL_QUERY), $result);

    return isset($result[$key]) ? $result[$key] : null;
}

0

Fungsi dinamis yang mengurai url string dan mendapatkan nilai parameter kueri yang diteruskan dalam URL

function getParamFromUrl($url,$paramName){
  parse_str(parse_url($url,PHP_URL_QUERY),$op);// fetch query parameters from string and convert to associative array
  return array_key_exists($paramName,$op) ? $op[$paramName] : "Not Found"; // check key is exist in this array
}

Panggil Function untuk mendapatkan hasil

echo getParamFromUrl('https://google.co.in?name=james&surname=bond','surname'); // bond will be o/p here

-3

Untuk mendapatkan parameter dari string URL, saya menggunakan fungsi berikut.

var getUrlParameter = function getUrlParameter(sParam) {
    var sPageURL = decodeURIComponent(window.location.search.substring(1)),
        sURLVariables = sPageURL.split('&'),
        sParameterName,
        i;

    for (i = 0; i < sURLVariables.length; i++) {
        sParameterName = sURLVariables[i].split('=');

        if (sParameterName[0] === sParam) {
            return sParameterName[1] === undefined ? true : sParameterName[1];
        }
    }
};
var email = getUrlParameter('email');

Jika ada banyak string URL, maka Anda dapat menggunakan loop untuk mendapatkan parameter 'email' dari semua string URL tersebut dan menyimpannya dalam array.


1
Saya tidak mendapatkan string ini dari bilah alamat browser tetapi Anda memposting solusi untuk itu
— Mohammad

OP bertanya tentang PHP, bukan JavaScript
— Jacob Alvarez
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.