【问题标题】:Same looking strings, but different inside. Why? One from $_GET and second from $var=""外观相同的字符串,但内部不同。为什么?一个来自 $_GET,第二个来自 $var=""
【发布时间】:2014-12-18 21:45:54
【问题描述】:

我从不同浏览器中的 url 得到奇怪的结果。

我有这个网址

example.com&nam=Oprava skúškovej písomky 2012-2013.png

此网址在 Safari 中被解释:

example.com&nam=Oprava%20sk%C3%BA%C5%A1kovej%20p%C3%ADsomky%202012-2013.png

Chrome 中的 url 不同:

example.com&nam=Oprava%20sku%CC%81s%CC%8Ckovej%20pi%CC%81somky%202012-2013.png

为什么会这样?因为 Safari 链接对图片有效,而 Chrome 链接无效。

好奇的工作人员要结束的是:

echo "<br>".var_dump($_GET['nam']);
echo "<br>".var_dump("Oprava skúškovej písomky 2012-2013.png");

结果

string(41) "Oprava skúškovej písomky 2012-2013.png" 
string(44) "Oprava skúškovej písomky 2012-2013.png" 

这些字符串看起来一样,但它们是不同的。我怎样才能避免这种情况?我想要两个相同的字符串。

【问题讨论】:

  • 这是因为字符串转义。您最好不要在文件名中使用字母数字字母,也不要使用空格...
  • 是否有相同的字符串转义。
  • ú 等可以在 UTF-8 中以不同的方式编码。 (基本上直接使用字符 ú,或者简单的 u 与变音符号组合。)“我想要两个相同的字符串” – 然后预先正确地对值进行 URL 编码(在 UTF- 8 编码形式),而不是让浏览器来做。

标签: php google-chrome url safari url-encoding


【解决方案1】:

在 Safari 中,我们的斯洛伐克语 ú 被编码为 %C3%BA

example.com&nam=Oprava%20sk%C3%BA%C5%A1kovej%20p%C3%ADsomky%202012-2013.png

在Chrome中它的编码为u + ´,它是u + %CC%81,还有s + ˇs + %CC%8C

example.com&nam=Oprava%20sku%CC%81s%CC%8Ckovej%20pi%CC%81somky%202012-2013.png

但没关系,当它解码回来时,它是相同的字符串。

在你的 var_dump 中你有不同的字符串:

echo "<br>".var_dump($_GET['nam']);
echo "<br>".var_dump("Oprava skúškovej písomky 2012-2013.png");

在第二个中,最后有 (空格)。

【讨论】:

  • Safari 工作:matfyz.mydevelops.com/… Chrome 不工作:matfyz.mydevelops.com/… 那么有没有办法告诉例如 rawurlencode() 像在 safari 中那样编码转义字符串?
  • 为什么你的 html 标头中有这个? &lt;?xml version="1.0" encoding="UTF-8"?&gt;?它不是 XML...
  • 您认为这会导致问题吗?好的,让我们来了解一下。我尝试不使用此标题。
  • 至少它不应该在那里......只有HTML标题
  • 你确定使用函数urlencode然后urldecode
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-03-29
  • 1970-01-01
  • 2016-05-22
  • 1970-01-01
相关资源
最近更新 更多