如果我在Symfony2中使用空格生成一个URL,例如:
example.com/some text
然后此网址显示在网站上:
example.com/some%20text
如何设置替换空格,而不是%20?
在这种情况下:
example.com/some+text
我需要通用解决方案,而不是在所有网址中添加|替换('%20','+')。
答案 0 :(得分:0)
谢谢大家的回答,我找到了自己的解决方案。
在MainBundle \ Resources \ config \ services.yml中添加了
parameters:
router.options.generator_base_class: Melofania\MainBundle\UrlGenerator
创建文件MainBundle \ UrlGenerator.php
namespace Melofania\MainBundle;
use Symfony\Component\Routing\Generator\UrlGenerator as BaseUrlGenerator;
class UrlGenerator extends BaseUrlGenerator
{
protected function doGenerate($variables, $defaults, $requirements, $tokens, $parameters, $name, $referenceType, $hostTokens)
{
$url = parent::doGenerate($variables, $defaults, $requirements, $tokens, $parameters, $name, $referenceType, $hostTokens);
return str_replace('%20', '+', $url);
}
}
但相反的程序还没有解决方案。我的意思是,带有插件的网址=>控制器中带空格的路由参数。我尝试使用UrlMatcher,但没有成功。如果您有答案,请在此页面上写下: Convert values of route parameters dynamically in Symfony 2
答案 1 :(得分:0)
我找到了一个解决方案,它对我有用。首先,我创建了一个编码/解码url的服务。所以你在控制器中str_replace('--the escape character--','+')
(使用服务或其他替代方案),你会得到这样的东西:
myRoute:
path: /{argument}
controller: sampleController
原始网址:
http://example.com/lorem+ipsum
所以在这里sampleController
会得到$argument
这样的内容:
$argument = 'lorem+ipsum';
在这里你只是解码它:
$theOriginal = str_replace('+','%20',$argument);
对于twig,如果需要显示,只需添加“Replace”过滤器:
{{ app.request.attributes.get('_route_params')['argument']|replace('+',' --the escape character--')}}