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.