จะใช้ฟังก์ชัน php กับ $_GET เพื่อรับ URL ที่สะอาดได้อย่างไร

ฉันกำลังพยายามรับ URL ที่ชัดเจนของท้องถิ่นที่เป็นของเขตที่เกี่ยวข้องซึ่งมีการนำฟังก์ชัน URL ที่ชัดเจนไปใช้กับตัวแปร $_GET ฉันมีสองเพจ เพจแรกคือ District.php ซึ่งมีลิงก์ไปยังท้องถิ่นที่เกี่ยวข้องโดยใช้ฟังก์ชันนี้เพื่อสร้าง URL ที่สะอาด ด้านล่างนี้เป็นโค้ดของหน้า District.php :-

<?php 
$remove[] = " ";
function clean($string) {
   $string = str_replace(' ', '-', $string); // Replaces all spaces with hyphens.
   $string = preg_replace('/[^A-Za-z0-9\-]/', '', $string); // Removes special chars.
   $string = preg_replace('/-+/', '-', $string); // Replaces multiple hyphens with single one.
   return $string;
}
include($_SERVER['DOCUMENT_ROOT'].'/database-path.php');
$district = str_replace('-',' ',$_GET['district']);
$state = str_replace('-',' ',$_GET['state']);
$sql="SELECT * FROM table_name WHERE district='$district' AND state='$state'";
$result = mysqli_query($con,$sql);      
if ($result->num_rows > 0) {                    
// output data of each row
    while($row = $result->fetch_assoc()) {  
        $id = $row['id'];   
        $district = $row['district'];   
        $locality = $row['locality'];   
        $state = $row['state'];
        $iso = $row['iso']; 
    }
?>

ในหน้าเขตเดียวกัน โค้ดด้านล่างนี้ใช้เพื่อสร้าง URL ที่ชัดเจนของท้องถิ่นที่เกี่ยวข้อง:-

<a href=\"/".str_replace($remove, "-", clean(strtolower($row['locality'])))."-".$row['id']."\">" . $row["locality"]. "</a>

รหัสข้างต้นกำลังสร้าง URL ไปยังหน้าท้องถิ่นทั้งหมดในลักษณะของ "locality-page-url-with-decoded-id-number" ในหน้าอำเภอ

ด้านล่างนี้เป็นโค้ดของ locality.php ที่ฉันพยายามใช้ฟังก์ชัน clean แบบเดียวกันกับตัวแปร $_GET เพื่อให้ได้ URL ที่สะอาด

<?php 
function clean($string) {
   $string = str_replace(' ', '-', $string); // Replaces all spaces with hyphens.
   $string = preg_replace('/[^A-Za-z0-9\-]/', '', $string); // Removes special chars.
   $string = preg_replace('/-+/', '-', $string); // Replaces multiple hyphens with single one.
   return $string;
}
include($_SERVER['DOCUMENT_ROOT'].'/database-path.php');
$locality = clean($_GET['locality']);
$localID =  base64_decode($_GET['id']) ;
$sql="SELECT * FROM table_name WHERE locality='$locality' AND id='$localID'";
$result = mysqli_query($con,$sql);
$rowcount=mysqli_num_rows($result);
if ($result->num_rows > 0) {                    
    // output data of each row
    while($row = $result->fetch_assoc()) {  
        $locality = $row['locality'];
        $content = $row['content'];
        $district = $row['district'];
        $state = $row['state'];
        $iso = $row['fld_iso'];
    }
}
?>

รหัส httacs:-

RewriteRule ^([^/]*)-([^/]*)$ locality.php?locality=$1&id=$2 [L]

ตอนนี้ปัญหาที่ฉันกำลังเผชิญคือ $locality = clean($_GET['locality']); ไม่ทำงานที่นี่ และกำลังกลับไปสู่ข้อผิดพลาด 404 โดยไม่ได้รับการล้างค่าของท้องถิ่น เมื่อฉันลองแบบเดียวกันด้วยตนเองหลังจากลบฟังก์ชัน clean ออกจากตัวแปร $_GET โดยใช้อักขระทั้งหมดที่มีอยู่ในฟิลด์ มันก็ทำงานได้ดี มีวิธีใดบ้างที่ฉันสามารถใช้ ID เป็นตัวแปรหลักเพื่อรับค่าแถวที่มีค่าที่สะอาดของท้องถิ่นใน URL ของเพจ


person Vikas Kukreja    schedule 01.10.2017    source แหล่งที่มา
comment
คุณช่วยระบุ URL ตัวอย่างที่คุณพยายามทำให้ใช้งานได้ได้ไหม   -  person vnt    schedule 01.10.2017
comment
@vnt URL ตัวอย่างที่ถูกสร้างขึ้นบนหน้าเขตคือ :- http://domainname.com/text-text-text-Mjk2 นี่คือ URL ที่ล้างแล้ว เวอร์ชันที่ไม่สะอาดของเดียวกันคือ :- http://domainname.com/text.-&-text-text-Mjk2   -  person Vikas Kukreja    schedule 01.10.2017
comment
ฉันพบว่าใช้ฟังก์ชัน clean ใน stackoverflow .com/questions/14114411/ แต่น่าเสียดายที่ไม่สามารถแสดงความคิดเห็นในหน้านี้เพื่อสอบถามวิธีการนำไปใช้กับตัวแปร $_GET เนื่องจากคะแนนชื่อเสียงต่ำในขณะนี้   -  person Vikas Kukreja    schedule 01.10.2017
comment
ฉันไม่เห็นปัญหาใดๆ จากโค้ดของคุณยกเว้น .htaccess ควรเป็น RewriteRule ^([^/]*)-([^/]*)$ locality.php?locality=$1&id=$2 [L] อย่างที่คุณบอกว่าไฟล์ที่สองคือ locality.php   -  person vnt    schedule 01.10.2017
comment
@vnt ขออภัยที่ไม่ดีในขณะที่ถามคำถาม ชื่อไฟล์เป็น locality.php ใน htaccess แล้ว และใช้งานไม่ได้ นี่เป็นเหตุผลว่าทำไม URL เวอร์ชันที่ไม่สะอาดจึงทำงานได้ดีหลังจากลบฟังก์ชัน clean ออกจากหน้าท้องถิ่น ฉันจะแก้ไขคำถาม ขอบคุณที่ชี้ให้เห็นว่า   -  person Vikas Kukreja    schedule 01.10.2017


คำตอบ (1)


ในที่สุดฉันก็แก้ไขมันได้ด้วยการแก้โค้ด นี่คือโค้ด htaccess ใหม่ที่ทำให้พารามิเตอร์แรกเป็นทางเลือก และเลือก ID เป็นพารามิเตอร์หลักเพื่อให้ทำงานได้อย่างถูกต้อง:-

RewriteRule ^(.*)-([^/]*)$ locality.php?locality=$1&id=$2 [L]

การเปลี่ยนแปลงที่ทำใน locality.php

มีการเปลี่ยนแปลงเล็กน้อยเพื่อใช้ ID เพื่อดึงข้อมูลแถวในลักษณะดังต่อไปนี้ :-

<?php 
include($_SERVER['DOCUMENT_ROOT'].'/database-path.php');
$localID =  base64_decode($_GET['id']) ;
$sql="SELECT * FROM table_name WHERE id='$localID'";
$result = mysqli_query($con,$sql);
$rowcount=mysqli_num_rows($result);
if ($result->num_rows > 0) {                    
    // output data of each row
    while($row = $result->fetch_assoc()) {  
        $locality = $row['locality'];
        $content = $row['content'];
        $district = $row['district'];
        $state = $row['state'];
        $iso = $row['fld_iso'];
    }
}
?>

ขอบคุณทุกคนสำหรับความช่วยเหลือของคุณ

person Vikas Kukreja    schedule 01.10.2017