PHP字符串比较获胜';不匹配看似相同的字符串

PHP字符串比较获胜';不匹配看似相同的字符串,php,Php,我正在用PHP清理静态站点的DOM,并提取特定的数据位,以便将内容放入数据库 对于本例,我将元素的内部HTML存储到$domString,我可以看到字符串是“Description”,但是当我将$domString与代码中的“Description”进行比较时,没有匹配项 if($domString == 'Description') { // This is not happening, even though I know // $domString contains 'De

我正在用PHP清理静态站点的DOM,并提取特定的数据位,以便将内容放入数据库

对于本例,我将元素的内部HTML存储到
$domString
,我可以看到字符串是“Description”,但是当我将
$domString
与代码中的“Description”进行比较时,没有匹配项

if($domString == 'Description') {
    // This is not happening, even though I know
    // $domString contains 'Description' :(
}
我已经将空白和其他内容条带化,当我
var_dump()
将它们都去掉时,我得到了以下结果:

string(45) "Description"
string(11) "Description"
按照阿尔瓦罗G.维卡里奥的建议,通过
bin2hex()
运行这两个函数分别返回以下两个值:

3c74642076616c69676e3d22746f702220636f6c7370616e3d2232223e4465736372697074696f6e3c2f74643e
4465736372697074696f6e

我需要一种方法来去除第一个字符串中的wahtever。

括号中的数字是总字节数。显然,45字节的字符串不能与11字节的字符串相同

您可以使用检查确切的字节。我还建议您不要在大多数浏览器中将输出视为HTML,您可以点击Ctrl+U

编辑:如果询问两个给定字符串在经过web浏览器处理后呈现相同单词的原因,最好通过实际查看原始数据(而不仅仅是查看浏览器生成的输出)来回答

编辑#2:

var_dump( hex2bin('3c74642077696474683d223832222076616c69676e3d22746f70223e547970653c2f74643e') );
。。。打印此文件:

string(37) "<td width="82" valign="top">Type</td>"
string(37)“类型”

你想做什么?您看到原始HTML了吗?

括号中的数字是总字节数。显然,45字节的字符串不能与11字节的字符串相同

您可以使用检查确切的字节。我还建议您不要在大多数浏览器中将输出视为HTML,您可以点击Ctrl+U

编辑:如果询问两个给定字符串在经过web浏览器处理后呈现相同单词的原因,最好通过实际查看原始数据(而不仅仅是查看浏览器生成的输出)来回答

编辑#2:

var_dump( hex2bin('3c74642077696474683d223832222076616c69676e3d22746f70223e547970653c2f74643e') );
。。。打印此文件:

string(37) "<td width="82" valign="top">Type</td>"
string(37)“类型”

你想做什么?你看到原始HTML了吗?

你应该问问为什么会出现这种情况

string(45) "Description"
string(11) "Description"
第二个是11个字符,第一个是45个字符!为什么?因此存在一些隐藏(未显示)的字符\符号。这就是为什么这个字符串不相等


试试这一个

你应该问为什么会发生这一个

string(45) "Description"
string(11) "Description"
第二个是11个字符,第一个是45个字符!为什么?因此存在一些隐藏(未显示)的字符\符号。这就是为什么这个字符串不相等

试试这个

解决方案是使用正则表达式 像这样

    function clean($string) {
$string = str_replace(' ', '-', $string); // Replaces all spaces with hyphens.
return preg_replace('/[^A-Za-z0-9\-\;\,\?\*\%\@\$\!\(\)\#\=\&]/', '', $string); // Removes special chars
}
将其调整为您需要的特殊字符,或者不添加您希望继续捕获的字符,如下面的
\\\\
或esle
\=

解决方案是使用正则表达式 像这样

    function clean($string) {
$string = str_replace(' ', '-', $string); // Replaces all spaces with hyphens.
return preg_replace('/[^A-Za-z0-9\-\;\,\?\*\%\@\$\!\(\)\#\=\&]/', '', $string); // Removes special chars
}

调整它以适应您需要的特殊字符,或者不添加您想要继续捕获的字符,比如
\\\\\
或esle
\=

如果您执行
trim($domString)==“Description”
?@AbhikChakraborty我想这不是问题,因为通常在
var\u dump()中显示空白区域
如果两个字符串具有不同的编码,则可能发生这种情况。其中是否有软连字符?请尝试对两个字符串使用
mb\u detect\u encoding($str)
,然后使用
mb\u convert\u encoding(domString,/*same\u encoding*/)
将两个字符串转换为相同的编码,并查看它们是否仍然相同。如果执行
trim,该怎么办($domString)='Description'
?@AbhikChakraborty我想这不是问题,因为通常在
var_dump();
中会显示空白,如果两个字符串的编码不同,可能会出现这种情况。其中是否有软连字符?请尝试
mb_detect_编码($str)
对于这两个字符串,然后使用
mb\u convert\u编码(domString,/*相同的\u编码*/)
将两者转换为相同的编码,看看它们是否仍然相同。是的,字节字符串不同。但是,我如何进行比较,我想将其正常化是否合理?如何比较两种水果?这取决于您的数据和您对“相等”的定义。桃子和苹果不同吗?如果您问我是什么它们是球形的吗?我是说,作为一个人,如果我看到一个字符串“Description”,另一个字符串“Description”,我希望得到一个正匹配,就像它们在屏幕上的呈现是匹配的一样。这是一个完全疯狂的要求吗?为了与之相处,我会检查实际数据。为什么猜测?bin2Hex()显示:3C74642077664683D2238322220776616C69676E3D22746F70223E5477970653C2F74643E和4465736372697074696f6eYeh,字节字符串是不同的。但是我如何进行比较,我想将其标准化是否合理?你如何比较两个水果?这取决于你的数据和相等的定义。桃子和苹果不同吗?如果你问它们是否是球形的呢?我是说,作为一个人,如果我看到一个字符串“描述”和另一个字符串“描述”,我希望得到一个正匹配,就像它们在屏幕上的呈现是匹配的一样。这是一个完全疯狂的请求吗?为了与之相处,我会检查实际数据。为什么猜测?bin2Hex()显示:3C7464207766474683D223832222076616C69676E3D22746F70223E547706563C2F74643E和4465736372697074696f6e