在比较PHP中的字符串之前,使编码统一

在比较PHP中的字符串之前,使编码统一,php,string,comparison,character-encoding,Php,String,Comparison,Character Encoding,我正在开发一个功能,它要求我获取网页的内容,然后检查该网页中是否存在某些文本。这是一个反向链接检查工具 问题是,这个函数大部分时间都运行得很好,但是偶尔,当链接明显存在时,它会标记一个页面没有链接。我一直跟踪到在视觉上比较输出中的字符串,它们匹配得很好,但是使用==操作符,php告诉我它们不匹配 认识到这可能是某种编码问题,我决定看看如果在它们上使用base64_encode()会发生什么,这样我就可以看到这样做是否会在两个字符串之间产生不同的结果(看起来完全相同) 我的怀疑得到了证实——对要比

我正在开发一个功能,它要求我获取网页的内容,然后检查该网页中是否存在某些文本。这是一个反向链接检查工具

问题是,这个函数大部分时间都运行得很好,但是偶尔,当链接明显存在时,它会标记一个页面没有链接。我一直跟踪到在视觉上比较输出中的字符串,它们匹配得很好,但是使用==操作符,php告诉我它们不匹配

认识到这可能是某种编码问题,我决定看看如果在它们上使用base64_encode()会发生什么,这样我就可以看到这样做是否会在两个字符串之间产生不同的结果(看起来完全相同)

我的怀疑得到了证实——对要比较的字符串使用base64_编码会产生不同的字符串。发现问题!问题是,我不知道如何解决它


是否有某种方法可以根据输出的文本(匹配的文本)使这些字符串统一,以便在php中比较它们时,它们匹配?

如果没有应用程序代码,很难说出发生了什么

尝试在字符串上使用()来删除尾随空格,这是肉眼看不见的


您可能会发现,它也可以提供更好的结果。

如何通过sanatizing过滤器(如果您使用的是php>5.2.0)同时运行这两者呢。我不知道它会做什么,但它可能会

试试,正如dcaunt所指出的那样。

您可以尝试使用to-PHP。创建新文档时,可以指定基础文档/网页的编码。据了解,在内部,一切都是在UTF-8中完成的。然后可以找到感兴趣的dom节点,并比较


如果您没有使用带有相关指定字符编码的网页,我建议您使用这些函数,尤其是

我并不完全相信这就是编码。PHP将以相同的格式在内部存储其所有字符串。你能试试这个密码吗?它将比较两个字符串中每个字符的ascii值,通过直观地比较字符串,可能会发现一些你看不到的东西

$str1 = ...;
$str2 = ...;

if(strlen($str1) != strlen($str2)) {
  echo "Lengths are different!";
} else {
  for($i=0; $i < strlen($str1); $i++) {
    if(ord($str1[$i]) != ord($str2[$i]) {
      echo "Character $i is different! str1: " . ord($str1[$i]) . ", str2: " . ord($str2[$i]);
      break;
    }
  }
}
$str1=。。。;
$str2=。。。;
如果(strlen($str1)!=strlen($str2)){
回声“长度不同!”;
}否则{
对于($i=0;$i
如果无法可靠地获得编码,可以使用
mb\u convert\u编码

$string1 = mb_convert_encoding($string1, 'utf-8', 'auto');
$string2 = mb_convert_encoding($string2, 'utf-8', 'auto');
如果可以确定编码(从http头或元标记),则应指定编码,而不是使用“自动”


你能可靠地检查你正在比较的网站的字符编码吗?@Peter:谢谢,+1感谢你安排并承认了这一点。:)我正在使用trim和strtolower来确保字符串匹配。strcmp返回-1。我会发布源代码,但我不确定它是否有用-比较位非常正常,要查看代码的其余部分(在获取和解析页面的地方),我需要粘贴一千行代码。您必须逐字节检查字符串,以了解它们的不同之处。像iconv这样的东西可能是获得统一编码的最佳方式。你建议使用trim()使我摆脱了4个小时的困境。谢谢这就是我,羞愧地垂着头。我正在比较的一个字符串的两个单词之间有两个空格。当然,当html呈现时,它不会在一行中显示2个空格,因此,在我查看源代码之前,字符串似乎完全匹配(根据firefox搜索工具,字符串确实匹配得很好)。谢谢大家的好答案,很抱歉,真正的答案太简单了。。。
$string1 = mb_convert_encoding($string1, 'utf-8', $encoding1);
$string2 = mb_convert_encoding($string2, 'utf-8', $encoding2);