使用PHP、DOMDocument和XPATH时出现字符串长度问题
我使用cURL获取数据,并使用DOMDocument和XPATH解析数据。strlen()正在进行不规则计数 一些介绍代码:使用PHP、DOMDocument和XPATH时出现字符串长度问题,php,string,xpath,domdocument,Php,String,Xpath,Domdocument,我使用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->loadH
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);
我获取了我需要的数据,它工作得很好,但是现在我需要比较两个字符串。原件直接取自
-标签。解析是将四个或五个
连接在一起
$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>";
我开始胡闹,替换所有空格,尝试使用不同编码的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>";
有点奇怪。str_replace甚至不会删除最后的空白
非常感谢您的帮助。我可以从
echo“
”
语句换行这一事实看出您正在浏览器中查看此内容。其他html元素也将由浏览器呈现。如果它们出现在字符串的末尾,则它们可能对显示的文本没有影响,但会影响长度。见鬼,它们甚至可以出现在字符串的中间而不影响格式,如果标签恰好是不会改变字符串输出外观的类型。
另一种可能是您有其他空白字符或不可打印字符
若要确认,请在浏览器中查看文档的源,而不是查看渲染的输出。如果此时看不到任何内容,请尝试下载文档并在一个好的文本编辑器(如记事本++)中查看,在该编辑器中可以调整显示的字符,以包括通常未打印的字符
一旦您确定是哪些字符/标记导致了问题,那么您就可以创建一个
str_replace()
或preg_replace()
调用来适当地处理它。我可以从echo”
“
语句生成新行的事实看出您正在浏览器中查看此问题。其他html元素也将由浏览器呈现。如果它们出现在字符串的末尾,则它们可能对显示的文本没有影响,但会影响长度。见鬼,它们甚至可以出现在字符串的中间而不影响格式,如果标签恰好是不会改变字符串输出外观的类型。
另一种可能是您有其他空白字符或不可打印字符
若要确认,请在浏览器中查看文档的源,而不是查看渲染的输出。如果此时看不到任何内容,请尝试下载文档并在一个好的文本编辑器(如记事本++)中查看,在该编辑器中可以调整显示的字符,以包括通常未打印的字符
一旦确定是哪些字符/标记导致了问题,您就可以创建一个
str_replace()
或preg_replace()
调用来适当地处理它。我是,您很可能是正确的。您是否知道足够的XPATH来提供查询('//li[@class=“i”]/');在纯文本中解析它,而不保存标记信息?我是,你很可能是对的。您是否知道足够的XPATH来提供查询('//li[@class=“i”]/');在纯文本中解析它,而不保存标记信息?
$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