我正在尝试对短语进行编码,以便将其传递到URL中。目前它适用于基本单词,其中空格替换为破折号。
<a href="./'.str_replace(' ', '-', preg_replace("/[^A-Za-z0-9- ]/", '', $phrase)).'">
它产生类似的东西:
/this-is-my-phase
在此网址带我的页面上,我可以用空格替换短划线并查询我的数据库中的这个短语。
我遇到的问题是如果短语包含撇号。我当前的脚本将其删除。有没有办法保留它或用一些URL友好的字符替换以容纳类似的东西?
this is bob's page
答案 0 :(得分:1)
有一个PHP标准库函数urlencode()
来编码%Xxx
的非字母数字字符,其中xx
是字符的十六进制值。
如果无法接受转换的限制(&amp;,©,£等),请参阅rawurlencode()
。
答案 1 :(得分:0)
如果您想允许其他字符,则必须将其添加到此部分:^A-Za-z0-9-
因此,例如,如果您希望允许'
正则表达式为[^A-Za-z0-9-' ]
答案 2 :(得分:0)
如果您只需要替换所有撇号('
),那么您可以将其替换为网址编码的字符%27
:
str_replace("'", "%20", $url);
修改强>
如果您想要替换所有不安全的URL,请使用@ wallyk的答案中的内置函数。它简单得多。