At 11:08 PM 4/5/2006, John Taylor-Johnston wrote:
How can I take enquiry:

<input name="searchenquiry" type="text" value="john">
or
<input name="searchenquiry" type="text" value="john johnston">

and parse its value to come up with this to do a boolean search

+"john"
or
+"john" +"johnston"


John,

If you're splitting your search string into discrete words, most search engine logic doesn't require quotes. Typically, quotation marks combine multiple words into single expressions, which makes sense with "John Johnston" but not with "John" "Johnston".

But since you requested the quotes I'll include them:

Here's one way to convert an incoming word series for a search:

        // get the entered text
        $sEnquiry = $_GET["searchenquiry"];

RESULT: [ john    johnston ]

        // protect against input attacks here
        ...

        // remove whitespace from beginning & end
        $sEnquiry = trim($sEnquiry);

RESULT: [john    johnston]

        // replace internal whitespace with single spaces
        $sEnquiry = preg_replace("/\s+/", " ", $sEnquiry);

RESULT: [john johnston]

        // replace each space with quote-space-plus-quote
        $sEnquiry = str_replace(" ", "\" +\"", $sEnquiry);

RESULT: [john" +"johnston]

        // add beginning & ending delimiters
        $sEnquiry = "+\"" . $sEnquiry . "\"";

RESULT: [+"john" +"johnston"]


Another technique that's worth exploring uses explode & implode to isolate the words and the join them again with different delimiters, e.g.:

        // remove extraneous whitespace
        $sEnquiry = ...

        // split string into array of words on each space
        $aWords = explode(" ", $sEnquiry);

RESULT: array(
                john
                johnston
        )

        // concatenate the array back into a string using desired delimiters
        $sSearch = implode(" +", $aWords);

RESULT: [john +johnston]

Paul

--
PHP General Mailing List (http://www.php.net/)
To unsubscribe, visit: http://www.php.net/unsub.php

Reply via email to