Php 编码SEO友好的URL

Php 编码SEO友好的URL,php,regex,Php,Regex,我试图对一个短语进行编码,以便在URL中传递它。目前,它可以很好地处理基本单词,用破折号替换空格 <a href="./'.str_replace(' ', '-', preg_replace("/[^A-Za-z0-9- ]/", '', $phrase)).'"> 在这个URL显示的页面上,我可以用空格替换破折号,并查询数据库中的这个短语 我的问题是这个短语是否包含撇号。我当前的脚本将删除它。有没有办法保留它或用一些URL友好字符替换它以适应类似的内容 this is bob'

我试图对一个短语进行编码,以便在URL中传递它。目前,它可以很好地处理基本单词,用破折号替换空格

<a href="./'.str_replace(' ', '-', preg_replace("/[^A-Za-z0-9- ]/", '', $phrase)).'">
在这个URL显示的页面上,我可以用空格替换破折号,并查询数据库中的这个短语

我的问题是这个短语是否包含撇号。我当前的脚本将删除它。有没有办法保留它或用一些URL友好字符替换它以适应类似的内容

this is bob's page

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

有一个PHP标准库函数,可以使用
%Xxx
对非字母数字字符进行编码,其中
xx
是字符的十六进制值


如果该转换(&、)、等)的限制不可接受,请参见。

如果您只需要替换所有撇号(
),则可以将其替换为URL编码字符
%27

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

编辑


如果要替换所有URL非安全字符,请使用@wallyk的答案中的内置函数。更简单。

我认为你的主题和问题的内容让人感到困惑。这是一个撇号,而不是星号……为什么它对URL不友好?我需要能够解码字符串并根据该短语检索记录。我使用.htaccess和rewriteRule,撇号会破坏它。
str_replace("'", "%20", $url);