【问题标题】:Symfony 4 Dotenv escape special charactersSymfony 4 Dotenv 转义特殊字符
【发布时间】:2020-02-07 14:33:49
【问题描述】:
我使用带有特殊字符的密码,symfony 返回错误“格式错误的参数“url”。”
我怎样才能使用这种密码? foo?bar
我尝试使用这样的变量
DATABASE_USER='foo'
DATABASE_PASSWORD='foo?bar'
DATABASE_URL=mysql://${DATABASE_USER}:${DATABASE_PASSWORD}@100.100.100.100:3306/db
但不工作
【问题讨论】:
标签:
symfony
escaping
symfony4
dotenv
【解决方案1】:
正如变量名所暗示的,DATABASE_URL 必须是一个 URL。也就是说,所有在 URL 中有意义的字符(例如 #、?、:、...)都必须进行 URL 编码。
例如,? 必须编码为 %3F,如果它应该以不同于标记查询的含义出现。网上有很多工具可以对 URL 进行编码...
【解决方案2】:
通过urlencode()或在线使用url编码的密码:
(例如:ZZ?*?daWm => ZZ%3F%2A%3FdaWm
完整的数据库 url 参数应该是:
DATABASE_URL=mysql://test_user:ZZ%3F%2A%3FdaWm@127.0.0.1:3306/test_db
然后去./app/config/packages/doctrine.yaml
我有带解析前缀的 url 参数:
doctrine:
dbal:
# (....)
url: '%env(resolve:DATABASE_URL)%'
只需删除解决问题的前缀“解决”,
修改后:
doctrine:
dbal:
# (....)
url: '%env(DATABASE_URL)%'