2010-04-13 130 views
18

如何在空格和破折号与PHP中只有短划线一起出现时替换空格和破折号?下面使用PHP语言在URL中用短划线替换所有空格和特殊符号

e.g是我的网址

http://kjd.case.150/1 BHK+Balcony- 700+ sqft. spacious apartmetn Bandra Wes 

在此我想用PHP破折号替换所有特殊字符。在URL中,“阳台”之后已经有一个破折号。如果我用特殊字符替换短划线,那么它变成两个破折号,因为URL中已经有一个短划线,我只需要1个短划线。

+0

什么特殊字符? – codaddict 2010-04-13 06:55:29

+0

你想要你的网址成为什么? 'HTTP:// kjd.case.150/1- BHK-阳台-700-平方英尺-spaciou-apartmetn-班德拉 - West'? – Eric 2010-07-23 13:30:30

回答

2

如果连字符周围最多可以有一个空格,则可以使用John的答案。如果可以有一个以上的空间,你可以尝试使用preg_replace

$str = preg_replace('/\s*-\s*/','-',$str); 

这甚至会取代-不与任何-包围的空间!

为了使它更有效一点,你可以这样做:

$str = preg_replace('/\s+-\s*|\s*-\s+/','-',$str); 

现在,这将确保一个-具有围绕它至少有一个空格其被替换一段时间。

38

我想说你可能想要其他方式。不是“空格”,而是每个非字母数字字符。 因为可能有其他字符,在URL不允许(+符号,例如,其被用作空间替换)

因此,为了从一个自由格式文本一个有效的URL

$url = preg_replace("![^a-z0-9]+!i", "-", $url); 
+0

不应该是正斜杠,而不是感叹号吗? – Eric 2010-07-23 13:28:02

+4

你必须先切断域名,否则你会失去你的点。 – Eric 2010-07-23 13:31:35

+0

working perfect ...谢谢 – Chaitenya 2017-02-21 19:33:26

2

这应该为你做

strtolower(str_replace(array(' ', ' '), '-', preg_replace('/[^a-zA-Z0-9 s]/', '', trim($string)))); 
1

应用此正则表达式/[^a-zA-Z0-9]/, '-'将与-替换所有非字母数字字符。将它存储在一个变量中,并再次应用这个正则表达式/\-$/, '',这将逃避最后一个字符。

0

旧胎面,而是帮助一些一个,使用此功能:

function urlSafeString($str) 
{ 
    $str = eregi_replace("[^a-z0-9\040]","",str_replace("-"," ",$str)); 
    $str = eregi_replace("[\040]+","-",trim($str)); 
    return $str; 
} 

就会返回你一个网址安全的字符串

+0

Eregi替换已弃用 http://php.net/manual/fr/function.eregi-replace.php – 2016-12-18 23:10:36

相关问题