我用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。解析是四个或五个<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,将类型转换为string,但都没有效果:
$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甚至不会删除最后一个空格。
任何帮助都是非常感谢的。
发布于 2013-08-01 13:05:07
从echo "<br>"语句生成新行这一事实可以看出,您正在浏览器中查看这一内容。浏览器也将呈现其他html元素。如果它们发生在字符串的末尾,则对显示的文本没有影响,但会影响长度。见鬼,如果标签的类型不改变字符串输出的外观,它们甚至可以发生在字符串的中间,而不会影响格式设置。
另一个可能性是,您有其他空格字符或不可打印的字符。
要确认哪一个,请在浏览器中查看文档的来源,而不是查看呈现的输出。如果此时没有看到任何内容,请尝试下载文档并在一个好的文本编辑器(如Notepad++)中查看它,在该编辑器中,可以调整显示哪些字符包含通常不打印的字符。
一旦找出了引起问题的字符/标签,就可以创建一个str_replace()或preg_replace()调用来适当地处理它。
https://stackoverflow.com/questions/17994346
复制相似问题