用斜杠转换url sperators

时间:2013-11-27 19:39:42

标签: php regex url

我有一个名为这样的类别:

$name = 'Construction / Real Estate';

这是两个不同的类别,我正在显示数据库的结果 对于他们每个人。但在此之前,我必须将用户发送到该类别的网址。

如果我做了类似的事情,这就是问题所在。

echo "<a href='site.com/category/{$name}'> $name </a>"; 

网址将变为

site.com/cateogry/Construction%20/%20Real%20Estate

我正在尝试删除%20并将其设为/所以,我做了str_replace('%20', '/', $name); 但这将成为这样的事情:

site.com/cateogry/Construction///Real/Estate
                              ^ ^ and ^ those are the problems.

由于它只有一个字,我希望它只显示为Construction/RealEstate

我可以通过使用至少10行代码来实现这一点,但我希望是否有正则表达式,以及简单的PHP方法来修复它。

3 个答案:

答案 0 :(得分:1)

您可以使用这样的简单解决方案:

$s = "site.com/cateogry/Construction%20/%20Real%20Estate";
$s = str_replace('%20', '', $s);

echo $s; // site.com/cateogry/Construction/RealEstate

答案 1 :(得分:1)

您有一个供人类消费的字符串,并根据您想要创建URL的字符串。

为了避免任何字符弄乱您的HTML,或者滥用XSS攻击,您需要使用htmlspecialchars()在HTML上下文中转义人类可读的字符串:

$name = 'Construction / Real Estate';
echo "<h1>".htmlspecialchars($name)."</h1>;

如果该名称应该放入网址,则还必须对其进行转义:

$url = "site.com/category/".rawurlencode($name);

如果任何网址应该转换为HTML,则必须为HTML进行转义:

echo "<a href='".htmlspecialchars($url)."'>";

现在,URL中的斜杠问题是,即使它们在URL中被转义,它们也很可能不被接受为常规字符。而且任何空格字符都不能很好地适应URL,尽管它们有效。

然后就是搜索引擎优化的黑魔法。

无论出于何种原因,在将其作为URL的一部分注入之前,应该转换类别字符串。在编码之前这样做。

作为一般规则,小写字符更好,空格应该是破折号,斜线也可能是破折号:

$urlname = strtr(mb_strtolower($name), array(" " => "-", "/" => "-"));

然后再说:

$url = "site.com/category/".rawurlencode($urlname);
echo "<a href='".htmlspecialchars($url)."'>";

事实上,使用htmlspecialchars()还不够。进入HTML属性的输出的转义与作为元素内容的输出不同。如果您查看Zend Framework 2中的escaper类,您会发现escaping a HTML attribute value的整个事情要复杂得多

不,你无法做到让事情变得更轻松。唯一的机会是使用一个功能,它可以为您提供所需的一切,但您仍然需要在任何地方应用正确的转义。

答案 2 :(得分:0)

也许,您想使用urldecode()并在之后删除空格?