【问题标题】:why is parse_url returning fragment?为什么 parse_url 返回片段?
【发布时间】:2011-11-03 05:17:55
【问题描述】:

我有以下网址:
http://sub.mysite.com/store/?store=Fine+Ting&storeid=3726&test1=value1&test2=value2

使用print_r(parse_url($url)) 给了我这个:

Array ( 
  [scheme] => http 
  [host] => sub.mysite.com 
  [path] => /store/ 
  [query] => store=Fine+Ting& 
  [fragment] => 038;storeid=3726&test1=value1&test2=value2 
) 

根据documentation,我应该只在#号之后得到fragment

那么为什么parse_url 返回片段?那不应该在[query]吗?

【问题讨论】:

  • 当我使用您的示例时,我没有得到 fragment 元素:var_dump(parse_url("http://sub.mysite.com/store/?store=Fine+Ting&storeid=3726&test1=value1&test2=value2"));。运行php5.3.5
  • 也在这里工作。也许您有编码问题。有了井号,我在那里看到了一个#038;,我在你的网址中看不到任何地方
  • 我用来返回 URL 的函数使用了 Wordpress esc_url。这似乎使用htmlentities。这就是为什么我得到038; 感谢@mAu 看到这个:)

标签: php parse-url


【解决方案1】:

你的 url 有问题,& 符号是在 htmlentities (&) 中编码的。因此parse_str 认为,片段从那里开始。

在将 url 传递给 parse_url 之前尝试使用 html_entity_decode

【讨论】:

  • 你从哪里得到网址?您是否对其进行任何处理?
  • @mAu,谢谢。使用html_entity_decode 解决了我的问题。我正在使用自定义函数来返回 URL。这个函数使用了Wordpress的esc_url
  • 是的,这会产生“错误”。正如文档所述:“将与号 (&) 和单引号 (') 编码为数字实体引用 (&, ')。” (esc_url docs)。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-01-26
相关资源
最近更新 更多