1

我使用 cURL 获取数据,并使用 DOMDocument 和 XPATH 进行解析。strlen() 给出不规则计数。

一些介绍代码:

curl_setopt($ch, CURLOPT_URL,$url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
$data = curl_exec($ch);     
$dom = new DOMDocument();
$dom->preserveWhiteSpace = false;
$dom->loadHTML($data);
$xpath = new DOMXpath($dom);

我获取了我需要的数据并且效果很好,但是现在我需要比较两个字符串。原件直接取自<li>-tag。Parsed 是四五个<span>连接在一起的。

$original = $i[$n]['full'];
$parsed = $i[$n]['value'].$i[$n]['type'].$i[$n]['name'].$i[$n]['extra'];

echo $original."<br>";
echo $parsed."<br><br>";
echo strlen($original)."<br>";
echo strlen($parsed)."<br><br>";

给:

4 -5 boneless chicken breasts
4-5Boneless chicken breasts

70
27

我开始通过替换所有空格来搞乱,尝试 mb_strlen 使用不同的编码,类型转换为字符串,但都无济于事:

$replace = array(' ',',');
$mod_original = str_replace($replace,'',$original);
$mod_parsed = str_replace($replace,'',$parsed);

var_dump($mod_original);
echo "<br>";
var_dump($mod_parsed);
echo "<br><br>";

echo mb_strlen($mod_original,'UTF-8')."<br>";
echo mb_strlen($mod_parsed,'UTF-8')."<br>";

结果:

string(62) "4-5 bonelesschickenbreasts" 
string(25) "4-5Bonelesschickenbreasts" 

62
25

有什么奇怪的。str_replace 甚至不会删除最后一个空格。

任何帮助表示赞赏。

4

1 回答 1

1

我可以告诉您,您正在浏览器中查看此语句,因为echo "<br>"语句换行了。其他 html 元素也将由浏览器呈现。如果它们出现在字符串的末尾,那么它们可能对显示的文本没有影响,但会影响长度。哎呀,如果标签碰巧是不会改变字符串输出外观的类型,它们甚至可以出现在字符串中间而不影响格式。

另一种可能性是您有其他空白字符或不可打印的字符。

要确认哪个,请在浏览器中查看文档的源代码,而不是查看呈现的输出。如果此时您没有看到任何内容,请尝试下载文档并在一个好的文本编辑器(如 Notepad++)中查看它,您可以在其中调整显示的字符以包括通常不打印的字符。

一旦您找出导致问题的字符/标签,您就可以创建一个str_replace()preg_replace()调用来适当地处理它。

于 2013-08-01T13:05:07.950 回答