【问题标题】:2 Identical Strings aren't matching in string length PHP2 相同的字符串在字符串长度 PHP 中不匹配
【发布时间】:2015-08-05 15:40:24
【问题描述】:

我正在尝试比较来自 2 种不同类型请求的信息,作为我系统的一部分,以允许对某些页面的权限,但一直遇到令人难以置信的字符串比较问题。

我得到的结果

string(26) "?type=week&date=2015-08-06" // exploded URI
string(30) "?type=week&date=2015-08-06" // query string 

分解的 URI

$pageReqCheck      = explode("/", urldecode($_SERVER["REQUEST_URI"]));
$accessPermissions = $pageReqCheck[3];

查询字符串

$queryString       = "?".$_SERVER['QUERY_STRING'];

从 FOR 循环编辑结果

查询字符串

int(63) int(116) int(121) int(112) int(101) int(61) int(119) int(101) int(101) int(107) int(38) int(97 ) int(109) int(112) int(59) int(100) int(97) int(116) int(101) int(61) int(50) int(48) int(49) int(53) int (45) 整数(48) 整数(56) 整数(45) 整数(48) 整数(54)

分解的 URI

int(63) int(116) int(121) int(112) int(101) int(61) int(119) int(101) int(101) int(107) int(38) int(100) ) int(97) int(116) int(101) int(61) int(50) int(48) int(49) int(53) int(45) int(48) int(56) int(45) int (48) 整数(54)

编辑了不同的解决方案

$queryString = html_entity_decode($_SERVER['QUERY_STRING']);

【问题讨论】:

  • 对每个字符串运行此命令,然后向我们展示结果:for ($i = 0; $i < strlen($string); $i++) { var_dump(ord($string[$i])); } 其中$string 是输入。
  • 听起来像 &&
  • 在@Flosculus 上面的帖子中添加
  • 看起来@VolkerK 是对的。 chr(38) . chr(97) . chr(109) . chr(112) . chr(59) = &amp.
  • @VolkerK 格式化两个变量以便它们使用 & 或 & 的好方法是什么?具体来说?

标签: php string query-string


【解决方案1】:
<?php
$input = [
    'int(63) int(116) int(121) int(112) int(101) int(61) int(119) int(101) int(101) int(107) int(38) int(97) int(109) int(112) int(59) int(100) int(97) int(116) int(101) int(61) int(50) int(48) int(49) int(53) int(45) int(48) int(56) int(45) int(48) int(54)',
    'int(63) int(116) int(121) int(112) int(101) int(61) int(119) int(101) int(101) int(107) int(38) int(100) int(97) int(116) int(101) int(61) int(50) int(48) int(49) int(53) int(45) int(48) int(56) int(45) int(48) int(54) '
];

foreach($input as $t) {
    preg_match_all('!int\((\d+)\)!', $t, $m);
    foreach( $m[1] as $c ) {
        echo chr($c);
    }
    echo "\r\n";
}

打印

?type=week&amp;date=2015-08-06
?type=week&date=2015-08-06

(在不解释 html 实体的控制台上)。

您通过 $_SERVER["REQUEST_URI"] 获得的字符串包含文字 &amp;amp;,而另一个包含表示相同字符的 html 实体 &amp;amp;
您可能使用 (html) 浏览器作为输出媒体,因此没有发现差异。

【讨论】:

  • 有没有比循环更好的方法,例如 php 中的正则表达式可以 preg_replace 只是 &与 &。看起来这是很多循环,因为我必须循环获取输入,然后循环修复 2 次以修复输入。
  • 给你复选标记,因为它有效,但我找到了我使用的替代解决方案。 html_entity_decode($_SERVER['QUERY_STRING']
猜你喜欢
  • 2010-12-24
  • 1970-01-01
  • 1970-01-01
  • 2012-12-23
  • 2014-05-15
  • 1970-01-01
  • 1970-01-01
  • 2022-11-16
  • 1970-01-01
相关资源
最近更新 更多