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

时间:2013-12-04 02:14:24

标签: php sqlite get

我正在尝试建立一个访问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>

当我点击FirstName为“Denzil”且LastName为“Ezras”的索引页面上的某个人的名字时,它可以正常工作。 lookup.php显示他的FirstName,LastName和Age。但是,当一个人的名字或姓氏中有空格时,我会遇到问题。例如,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中时,它会提供正确的值。我做错了什么?

1 个答案:

答案 0 :(得分:1)

试试这个 正如我从网址中看到的,而不是将空格显示为%20,它将其显示为+ 这会将任何空格转换为%20,这是url可以接受的。

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

或者你可以简单地使用

rawurlencode($lastName);