PHP和SQLite-字符串包含空格的问题


PHP and SQLite - Issue with string including space

我正在尝试创建一个网站来访问SQLite数据库并检索不同用户的信息。然而,我遇到了一些问题。这是我的索引页代码。

<?php
$db = new SQLite3('people.db');
$results = $db->query('select FirstName,LastName from People');
?>
<html>
    <head>
    </head>
    <body>
        <?php
        while ($row = $results->fetchArray()) {
            echo '<div class="person"><p class="name"><a href="lookup.php?first=" .
                urlencode($row['FirstName']) . '&last=' . urlencode($row['LastName']) . '">' .
                $row['FirstName'] . ' ' . $row['LastName'] . '</a></p></div>;
        ?>
        }
        ?>
    </body>
</html>

和lookup.php代码:

<?php
$db = new SQLite3('people.db');
$first = urldecode($_GET['first']);
$last = urldecode($_GET['last']);
$results = $db->query('select * from People where FirstName="' . $first . '" and LastName="' . $last . '"');
$row = $results->fetchArray();
?>
<html>
    <head>
    </head>
    <body>
        <div class="person">
            Name: <?php echo $row['FirstName'] ?><br/>
            Last Name: <?php echo $row['LastName'] ?><br/>
            Age: <?php echo $row['Age'] ?><br/>
        </div>
    </body>
</html>

当我点击索引页面上名字为"Denzil"、姓氏为"Ezras"的人的名字时,效果很好。lookup.php显示他的名字、姓氏和年龄。然而,当一个人的名字或姓氏中有空格时,我会遇到问题。例如,一个人的FirstName是"James",LastName是"De Jongh",lookup.php将不显示FirstName、LastName或Age。此页面的URL显示为:

http://localhost/lookup.php?first=James&last=De+Jongh

我曾尝试在PHP中使用var_export来查看$first和$last,它们似乎是有序的。当我将它们复制并粘贴到sqlite3.exe中时,它会得到正确的值。我做错了什么?

试试这个正如我从url中看到的那样,空间不是显示为%20,而是显示为+这将把任何空格转换为%20,这是url可以接受的。

$last = str_replace(' ', '%20', $last);

或者你可以简单地使用

rawurlencode($lastName);