|
Posted by David on 10/18/06 18:05
On Tue, 17 Oct 2006 11:55:44 -0700, Jeremy <jeremy@pinacol.com> wrote:
>David wrote:
>> Sent this to alt.php a couple of days back, but doesn't look like I'll
>> get an answer, so trying here.
>>
>> I'm trying to convert a script to use friendly URLs, I've done this
>> before, but my PHP skills are quite basic so far, far from proficient
>> at this.
>>
>> <snip>
>
>
>One thing I immediately noticed: your text2url function lowercases
>everything, but your Britney Spears example is capitalized.
I'd tried it with and without lowercase, so that wasn't a major
problem. Don't mind if the URls have upper case characters.
>At a more fundamental level, how are you using the URL to lookup the
>artists themselves? This is where the problem lies. You are going to
>have to do the same transformation to the artist name when looking up
>the artist that you did when creating the friendly URL.
>
>For example, here is a simple scheme which lowercases the URL and
>replaces spaces with dashes, and the corresponding database lookup.
>
>.htaccess:
>-----------------------------------------
>RewriteRule ^artists/([^/]+) /artists.php?artistName=$1
>-----------------------------------------
>
>
>URL creation:
>-------------------------------------------
>$url = "/artists/" . strtolower(str_replace(" ", "-", $artistName));
>-------------------------------------------
I've tried similar and it's worked fine with other sites, just this
one fails!
Tried a simpler function-
function safeurl($name){
$retVal = str_replace('/',' ',$name);
$retVal = str_replace('-',' ',$retVal);
return $retVal;
}
To replace a / with a space and spaces with a -
Example code-
$viewart = '<div style="clear:both; text-align:right;
padding-right:15px;">
<h4>View All <a
href="'.$site_url.''.safeurl($typ).'/Artist/'.safeurl($artist).'/1/">Polyphonic
Ringtones by '.$artist.'</a></h4>
</div>';
}
?>
<?php echo''.$viewart.'';?>
It works at code level, the \ and spaces are removed/replaced with -
when viewed in a browser but when clicking links they fail.
This code on the other hand works fine-
$viewart = '<div style="clear:both; text-align:right;
padding-right:15px;">
<h4>View All <a
href="'.$site_url.''.urlencode($typ).'/Artist/'.urlencode($artist).'/1/">Polyphonic
Ringtones by '.$artist.'</a></h4>
</div>';
}
?>
<?php echo''.$viewart.'';?>
This as expected replaces spaces with a + and characters like / are
replaced with %2F etc... the + URLs work but the / and some other
characters don't, so partial success.
I don't understand why the function fails?
>
>Artist lookup (assumes PDO/PGSQL):
>------------------------------------
>$artist_query = $pdo->prepare("select * from artists where
>LOWER(REPLACE(artist_name, ' ', '-')) = :artistName");
>
>$artist_query->bindParam(":artistName", $_GET["artistName"]);
>$artist_query->execute();
>$artist = $artist_query->fetch();
>-----------------------------
Does it make any difference that most of the data is from a CSV file
(no database)?
The code to get data is-
$row=0;
$file = fopen("$filepath", "r");
while (($data = fgetcsv($file, 1000, ";")) !== FALSE) {
if ($sct==''){
if ($data[$DATA["typ"]]==$typ and $data[$DATA["cat"]]==$cat or
$data[$DATA["typ"]]==$typ and $cat==''){
$row++;
$nam[$row] = $data[$DATA["nam"]];
$dsc[$row] = $data[$DATA["dsc"]];
$dsl[$row] = $data[$DATA["dsl"]];
$pth[$row] = $data[$DATA["pth"]];
$ppl[$row] = $data[$DATA["ppl"]];
} }
if ($sct>''){
if ($data[$DATA["typ"]]==$typ and $data[$DATA["cat"]]==$cat and
$data[$DATA["sct"]]==$sct){
$row++;
$nam[$row] = $data[$DATA["nam"]];
$dsc[$row] = $data[$DATA["dsc"]];
$dsl[$row] = $data[$DATA["dsl"]];
$pth[$row] = $data[$DATA["pth"]];
$ppl[$row] = $data[$DATA["ppl"]];
} }
}
fclose($file);
First time I've worked with a site using a CSV file.
Should I be replacing the spaces etc... in this code somehow?
>This code will obviously not work verbatim; it's just an example of how
>you need perform the same transformation on artist names when you're
>looking them up, or the comparison won't work. Notice how in my SQL
>query I'm comparing the passed-in artist name (in the form of
>"britney-spears") with the artist name in the database (in the form of
>"Britney Spears") only AFTER I transform the database version to the
>proper format - LOWER(REPLACE(...)) transforms "Britney Spears" to
>"britney-spears", making the comparison successful.
I tried variations of your code, but couldn't get anything to work.
>Jeremy
Thanks very much for the advice so far, appreciated.
David
--
Free Search Engine Optimization Tutorial
http://www.seo-gold.com/tutorial/
[Back to original message]
|