Flutter开发中如何转义字符串内的美元符号$字符
Flutter 处理含$字符URL的转义方案
Dart 语法中,普通字符串内的$是字符串插值的专用标识符,直接写在字符串中不会被识别为普通文本,会导致Uri解析结果不符合预期。可通过以下三种方式解决:
逐个转义$字符
每一个需要保留为普通文本的$前面加反斜杠\做转义即可,示例代码:var url = Uri.parse('https://olinda.bcb.gov.br/olinda/servico/Expectativas/versao/v1/odata/ExpectativaMercadoMensais?\$top=100&\$skip=0&\$orderby=Data%20desc&\$format=json&\$select=Indicador,DataReferencia,Mediana,baseCalculo');使用原始字符串(Raw String)
在字符串的引号前加r前缀,声明为原始字符串后,字符串内所有特殊字符都会被当作普通文本处理,不需要逐个转义$,写起来更简便,示例代码:// r前缀标记原始字符串,内部$无需额外转义 var url = Uri.parse(r'https://olinda.bcb.gov.br/olinda/servico/Expectativas/versao/v1/odata/ExpectativaMercadoMensais?$top=100&$skip=0&$orderby=Data%20desc&$format=json&$select=Indicador,DataReferencia,Mediana,baseCalculo');规范构造Uri(推荐)
不手动拼接完整URL字符串,直接用Uri类的构造函数传入路径、查询参数,由框架自动处理特殊字符转义和URL编码,容错率最高,示例代码:var url = Uri( scheme: 'https', host: 'olinda.bcb.gov.br', path: '/olinda/servico/Expectativas/versao/v1/odata/ExpectativaMercadoMensais', queryParameters: { '\$top': '100', '\$skip': '0', '\$orderby': 'Data desc', '\$format': 'json', '\$select': 'Indicador,DataReferencia,Mediana,baseCalculo' } );
注意:如果URL中除了$之外还有其他需要URL编码的特殊字符(比如示例里的空格),优先选择第三种构造方式,不需要手动写百分号编码,框架会自动完成合规处理。
内容的提问来源于stack exchange,提问作者Rodrigo Mantovani
相关产品推荐
相关产品推荐

