PHP字符串比较不匹配看似相同的字符串

时间:2014-04-03 12:01:12

标签: php

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

对于此示例,我将元素的内部HTML存储到$domString,我可以看到字符串是“描述”,但是当我在代码中将$domString与“描述”进行比较时不配。

if($domString == 'Description') {
    // This is not happening, even though I know
    // $domString contains 'Description' :(
}

我有条纹的空白和东西,当我var_dump()他们两个出来时我得到了这个:

string(45) "Description"
string(11) "Description"

通过bin2hex()运行它们,因为ÁlvaroG。Vicario建议分别返回以下两个值:

3c74642076616c69676e3d22746f702220636f6c7370616e3d2232223e4465736372697074696f6e3c2f74643e
4465736372697074696f6e

我需要一种方法来剥离wahtever正在加强第一个字符串。

3 个答案:

答案 0 :(得分:4)

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

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

编辑:询问为什么两个给定的字符串在被Web浏览器处理后呈现相同的单词,可以通过实际查看真实的原始数据来更好地回答(而不是仅查看由浏览器)。

编辑#2:

var_dump( hex2bin('3c74642077696474683d223832222076616c69676e3d22746f70223e547970653c2f74643e') );

...打印出来:

string(37) "<td width="82" valign="top">Type</td>"

你想strip HTML tags还是什么?你看到了原始HTML吗?

答案 1 :(得分:0)

你应该质疑为什么会发生这种情况

string(45) "Description"
string(11) "Description"

第二个是11个字符,第一个是45个字符!为什么?所以有一些隐藏的(未显示)字符\符号。这就是为什么这个字符串不相等的原因。

试试这个Remove control characters from php String

答案 2 :(得分:0)

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

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

将其修改为您需要的特殊字符,或者不添加您想要保持的字符\#或esle \=