我正在使用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正在加强第一个字符串。
答案 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个字符!为什么?所以有一些隐藏的(未显示)字符\符号。这就是为什么这个字符串不相等的原因。
答案 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 \=