用PHP转义CURL @符号

我在写一个通过curl数据提交的php应用程序来注册一个iContact邮件列表。 不过,我一直收到无效的电子邮件地址错误。 我认为这可能是由于我正在逃避@符号,因此它看起来像%40而不是@。 另外,根据curl_setopt的php文档和CURLOPT_POSTFIELDS:

完整的数据在HTTP“POST”操作中发布。 要发布文件,请使用@预先指定文件名并使用完整路径。

那么,无论如何,通过curl在php中传递@符号作为发布数据,而不是首先通过urlencode运行它?


在传递给curl_setopt()之前,首先在你的数据数组上使用http_build_query() ,这将导致它发送表单作为application/x-www-form-encoded而不是multipart/form-data (因此@不是解释)。

另外你为什么真的关心电子邮件地址中的@? 只有@是第一个字符,而不是中间的某个字符才重要。


在搜索PHP curl手册后,我发现没有任何信息可以转义第一个'@',如果post字段是一个字符串而不是文件,如果使用multipart / form-data编码进行发布。

我解决这个问题的方法是在文本的开头添加一个空格。 虽然我们的后端API会清空空白,所以它可以删除空白并恢复原始文本。 我不知道天气Twitter API会修剪用户输入的空白​​。

如果是这样,这个解决方法也适用于你。

如果任何人在使用PHP curl和multipart / form-data编码时找到逃离第一个'@'的方式,请告诉我们。


我遇到了同样的问题,虽然卷曲本身而不是PHP curl。

当使用curl的字段选项' -F '时,在POST中不会发送前导@符号,而是指示curl发送紧接在该符号后面的文件名作为POST的一部分。

幸运的是,curl提供了另一个选项“ --form-string ”,除了'form-string'选项没有被解析外,其行为方式与' -F '相同。

例如,如果要使用curl将值为“@value”的post field1和具有“testfile.txt”文件的file1使用,请按如下所示进行操作:

curl "http://www.url.com" --form-string "field1=@value" -F "file1=@testfile.txt"
链接地址: http://www.djcxy.com/p/48889.html

上一篇: Escaping CURL @ symbol with PHP

下一篇: c++