【问题标题】:PHP CURL passing UTF-8 characters in the URLPHP CURL 在 URL 中传递 UTF-8 字符
【发布时间】:2026-01-19 20:55:01
【问题描述】:

当我发送一个包含 UTF-8 字符 é 和 ú 的 URL 时,这些字符使用 PHP 函数 rawurlencode 进行编码。一旦我生成了我的 URL,它就会被传递给一个 CURL 请求到一个返回 XML 数据的 Java Web 服务。

Chébé 一词的示例编码以 Ch%C3%A9b%C3%A9 形式发送到 Web 服务,据我所知,这是标准格式。我还尝试了 htmlentities 函数将字符串转换为实体,然后使用 rawurlencode 对字符串进行编码。

由于明显的 XML 原因,与查询匹配的示例中的项目名称是实体形式。

我的问题是 Web 服务在发出请求时似乎因 500 内部错误而失败。所有其他字符串都很好。它仅受 UTF-8 字符影响。当我在浏览器中以 Chébé 之类的实体形式传递 URL 时,服务会响应结果,但是当我以浏览器 URL 编码形式传递时,它也会失败。我在这里遗漏了什么吗?

【问题讨论】:

    标签: php curl utf-8


    【解决方案1】:

    Google 以相同的方式对其进行编码 q=Ch%C3%A9b%C3%A9 所以...它是正确的。你在处理程序中做什么?假设您也控制处理程序服务,如果所有其他方法都失败,则 Base64 对其进行编码...

    【讨论】:

    • 处理程序获取编码的 URL 并使用 java.net.URLDecoder.decode(url, "UTF-8") 对其进行解码。我不控制 Java 源代码。我曾考虑过对其进行 base64 编码,但该服务没有被编程来处理它。例如,我尝试将Chébé 编码为Chébé,然后传递Ch%26%23233%3Bb%26%23233%3B,但它没有返回任何结果。
    • 我认为他们有非 ASCII 字符的问题。我不知道你能对此做些什么。除了用干净的变体替换重音字符(在可能的情况下标准化 Unicode,请参阅排序规则unicode.org/charts/collation 此处)。
    • 感谢您对此的帮助。我会尝试你的建议。 URL 编码的重点是处理 URL 中的非 ASCII 字符和其他符号。
    • 你做对了。但是接收器也应该能够处理非 ASCII 字符 :) 有很多人不知道非英文字符是什么。真的很伤心!