首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用PHP、DOMDocument和XPATH时字符串长度问题

使用PHP、DOMDocument和XPATH时字符串长度问题
EN

Stack Overflow用户
提问于 2013-08-01 12:40:14
回答 1查看 223关注 0票数 1

我用cURL获取数据,用DOMDocument和XPATH进行解析。strlen()正在进行不规则的计数。

一些简介代码:

代码语言:javascript
复制
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>的连接在一起。

代码语言:javascript
复制
$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>";

给予:

代码语言:javascript
复制
4 -5 boneless chicken breasts
4-5Boneless chicken breasts

70
27

我开始使用替换所有空格的方法,尝试使用不同编码的mb_strlen,将类型转换为string,但都没有效果:

代码语言:javascript
复制
$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>";

结果:

代码语言:javascript
复制
string(62) "4-5 bonelesschickenbreasts" 
string(25) "4-5Bonelesschickenbreasts" 

62
25

有些事很奇怪。str_replace甚至不会删除最后一个空格。

任何帮助都是非常感谢的。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-08-01 13:05:07

echo "<br>"语句生成新行这一事实可以看出,您正在浏览器中查看这一内容。浏览器也将呈现其他html元素。如果它们发生在字符串的末尾,则对显示的文本没有影响,但会影响长度。见鬼,如果标签的类型不改变字符串输出的外观,它们甚至可以发生在字符串的中间,而不会影响格式设置。

另一个可能性是,您有其他空格字符或不可打印的字符。

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

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

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/17994346

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档