简体   繁体   中英

Encoding SEO friendly URL

I am trying to encode a phrase in order to pass it inside a URL. Currently it works fine with basic words, where spaces are replaces with dashes.

<a href="./'.str_replace(' ', '-', preg_replace("/[^A-Za-z0-9- ]/", '', $phrase)).'">

It produces something like:

/this-is-my-phase

On the page that this URL takes me I am able to replace the dashes with spaces and query my db for this phrase.

The problem I have is if the phrase contains apostrophe. My current script removes it. Is there any way to preserve it or replace with some URL-friendly character to accommodate something like?

this is bob's page

There is a PHP standard library function urlencode() to encode non-alphanumeric characters with %Xxx where xx is the hex value of the character.

If the limitations of that conversion (&, ©, £, etc.), are not acceptable, see rawurlencode() .

如果要允许其他字符,则必须将其添加到此部分: ^A-Za-z0-9-因此,例如,如果您希望允许'则正则表达式将为[^A-Za-z0-9-' ]

If you only need to replace all the apostrophes ( ' ), then you can replace it with the URL-encoded character %27 :

str_replace("'", "%20", $url);

EDIT

If you want to replace all URL-non-safe character, use a built-in function like in @wallyk's answer. It's much simpler.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM