将 html 字符串与带 php 的十六进制字符串进行比较

Compairing html string to hex string with php

我正在尝试比较两个字符串。与计算机相比,它们是不平等的。但对人眼来说,这些弦似乎是一样的。

当我运行 测试用 php 检查 bin2hex 时,它们显然不相等。一些如何将一组双引号读作 html。以下是一些示例:

 $string1 = strlen(html_entity_decode($_SESSION['pageTitleArray'][$b]));
 $string2 = strlen(html_entity_decode($value));

 echo 'Checking: ' . $_SESSION['pageTitleArray'][$b] . " " .  bin2hex($_SESSION['pageTitleArray'][$b]);
 echo '<br>';
 echo 'testing ' . $string1 . " = "bin2hex($string1) . " " . bin2hex($string2);
 echo '<br>';
 echo 'With: ' . $value . " " . bin2hex($value);

上面的代码将输出以下信息。

Checking: 1 PAIR OF BBC HEAD GASKET GASKETS MULTI LAYERED STEEL 4.585" 312050414952204f46204242432048454144204741534b4554204741534b455453204d554c5449204c41594552454420535445454c20342e35383522 testing 3630 3632 With: 1 PAIR OF BBC HEAD GASKET GASKETS MULTI LAYERED STEEL 4.585″ 312050414952204f46204242432048454144204741534b4554204741534b455453204d554c5449204c41594552454420535445454c20342e3538352623383234333b false

我有点不知道该怎么做...任何帮助将不胜感激。下面是代码的其余部分,因此您可以全面了解我要完成的工作。

     for($b = 0; $b < count($_SESSION['pageTitleArray']); $b++)
 {
   foreach($_SESSION['pushIdArrayQuery'] as $key => $value)
   {

     $string1 = strlen(html_entity_decode($_SESSION['pageTitleArray'][$b]));
     $string2 = strlen(html_entity_decode($value));

     echo 'Checking: ' . $_SESSION['pageTitleArray'][$b] . " " .  bin2hex($_SESSION['pageTitleArray'][$b]);
     echo '<br>';
     echo 'testing ' . $string1 . " = "bin2hex($string1) . " " . bin2hex($string2);
     echo '<br>';
     echo 'With: ' . $value . " " . bin2hex($value);

     if(trim($_SESSION['pageTitleArray'][$b]) == trim($value))
     {
       echo '<br>';
       echo '<h1>Success</h1>';
       echo '<br>';
       echo '<b>Key: </b>' . $key;
       echo '<br>';
       echo 'Page Id: ' . $_SESSION['pushTitleArrayQuery'][$key];
       echo '<br> ';
     }
     else {
       echo '<br>';
       echo 'false';
       echo '<br>';
     }
   }
 }

您有两种不同类型的引号(“在第一个字符串上,”在第二个字符串上)。

在人眼中它们看起来很相似,但它们与 PHP 完全不同。

这就是我解决问题的方法。请注意,我使用 html_entity_decode() 函数删除了任何 html 属性。然后,从那里我可以使用 preg_replace() 去除所有其他特殊字符并比较结果。

    //Loop through all the page titles from the directories
 for($b = 0; $b < count($_SESSION['pageTitleArray']); $b++)
 {
   //Loop through the page titles gathered from the database
   foreach($_SESSION['pushTitleArrayQuery'] as $key => $value)
   {
     //use html decode to remove the quotes with ENT_NOQUOTES
     $removeHtml =  html_entity_decode($value, ENT_NOQUOTES);

     //Test to make sure the encoding are the same for both variables. 
     $detectEncoding = mb_detect_encoding($value, "auto");

     //remove all non alphanumeric variables in the first string.
     $string1 = preg_replace("/[^a-zA-Z0-9]/", "", $_SESSION['pageTitleArray'][$b]);

     //remove all non alphanumeric variables in the second string.
     $string2 = preg_replace("/[^a-zA-Z0-9]/", "", $removeHtml);

     //Print out to see what the results look like from decode and encoding functions
     echo 'Testing the removal of html quotes: ' . $removeHtml . ' Encoding: ' . $detectEncoding;
     echo '<br>';

     //Show what variables are being compaired. 
     echo 'Checking: ' . $string1 . " " .  bin2hex($_SESSION['pageTitleArray'][$b]);
     echo '<br>';
     echo 'With: ' . $string2 . " " . bin2hex($value);


     //If statement to check if the to strings match. 
     if(trim($string1) === trim($string2))
     {
       echo '<br>';
       echo '<h1>Success</h1>';
       echo '<br>';
       echo '<b>Key: </b>' . $key;
       echo '<br>';
       echo 'Page Title: ' . $_SESSION['pushTitleArrayQuery'][$key];
       echo '<br>';
       echo 'Page Id: ' . $_SESSION['pushIdArrayQuery'][$key];
       echo '<br> ';
     }
     else {
       echo '<br>';
       echo 'false';
       echo '<br>';
     }
     echo '<br>';
   }
 }