Symfony 4 Dotenv 转义特殊字符

Posted

技术标签:

【中文标题】Symfony 4 Dotenv 转义特殊字符【英文标题】:Symfony 4 Dotenv escape special characters 【发布时间】: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

但不工作

【问题讨论】:

必须进行 url 编码。所以%3F? 【参考方案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)%'

【讨论】:

以上是关于Symfony 4 Dotenv 转义特殊字符的主要内容,如果未能解决你的问题,请参考以下文章

使用转义字符输出正确的网址

url特殊字符转义及解决方法

SpringBoot Yaml 配置 特殊字符转义

C++特殊字符转义序列

iOS:转义网址链接中的特殊字符问题

JS post表单特殊字符转义问题