Reply to Re: Problem with mod_rewrite and replacing spaces in URL

Your name:

Reply:


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]


Удаленная работа для программистов  •  Как заработать на Google AdSense  •  England, UK  •  статьи на английском  •  PHP MySQL CMS Apache Oscommerce  •  Online Business Knowledge Base  •  DVD MP3 AVI MP4 players codecs conversion help
Home  •  Search  •  Site Map  •  Set as Homepage  •  Add to Favourites

Copyright © 2005-2006 Powered by Custom PHP Programming

Сайт изготовлен в Студии Валентина Петручека
изготовление и поддержка веб-сайтов, разработка программного обеспечения, поисковая оптимизация