用于网址的Php strip变量

时间:2015-04-22 13:20:29

标签: php regex string replace

所以基本上我有一个php变量,我想在网址中添加。问题是,如果变量中包含奇怪的字符,则url将无效。

我的例子:

URL: http://localhost/myapp/products/$variable

变量看起来像这样:

$variable = 'books';               //books
$variable = 'art and design';      //art_and_design
$variable = '< 220g de CO2/Kg';    //_220g_de_CO2 
$variable = '< 220g /de CO2/Kg';    //_220g_

http://localhost/myapp/products/books
http://localhost/myapp/products/art_and_design
http://localhost/myapp/products/_220g_de_CO2
http://localhost/myapp/products/_220g_

我想将变量看起来像注释中的值,这意味着空格应该被_替换,同时删除与url(&lt;或/)冲突的部分。

正如你所看到的,我已经删除了第一个字符和最后一个字符,并且只保留了很好的部分,因为我在数据库中使用它进行搜索(LIKE opperator)并且它不会工作如果我仅删除/并同时保留Kg

我需要一个函数来为我做这个,目前它看起来像这样:

function stripVar($variable){
    return str_replace(' ', '_', $variable);
}

但我不知道如何处理另一部分。感谢。

4 个答案:

答案 0 :(得分:1)

这样可以吗?

$arr = array('books', 'art and design', '< 220g de CO2/Kg', '< 220g/ de CO2/Kg'); 
foreach($arr as $variable) {
    echo "$variable -> ";
    $variable = preg_replace('/\s+/', '_', $variable);
    $variable = preg_replace('~(?:^[^</]*[</]+|[</]+.*$)~', '', $variable);
    echo $variable,"\n";
}

<强>输出:

books -> books
art and design -> art_and_design
< 220g de CO2/Kg -> _220g_de_CO2
< 220g/ de CO2/Kg -> _220g

答案 1 :(得分:-1)

您可以使用url_encode()http://php.net/manual/en/function.urlencode.php 然后url_decode()得到真正的变量。然后你可以使用它。

答案 2 :(得分:-1)

除了url_encode()之外,您还可以使用以下功能,它具有更多&#34;漂亮的&#34;输出:

function prettyURL($variable)
{
return  preg_replace('/^-+|-+$/', '', strtolower(preg_replace('/[^a-zA-Z0-9]+/', '_', $variable)));
}   

对于您的变量,它产生以下输出:

Variable 1: books
Variable 2: art_and_design
Variable 3: _220g_de_co2_kg

更新,删除了strtolower:

function prettyURL($variable)
{
    return  preg_replace('/^-+|-+$/', '', preg_replace('/[^a-zA-Z0-9]+/', '_', $variable));
} 

输出:

Variable 1: books
Variable 2: art_and_design
Variable 3: _220g_de_CO2_Kg

Making strings "URL safe"

答案 3 :(得分:-2)

您可以使用数组删除所需内容(第一个参数):

$whatRemove = array(' ', '<', 'Kg'); // add more if you need.
str_replace($whatRemove,'', $variable);