1

DOMDocument と XPATH で解析する cURL でデータをフェッチします。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);

必要なデータを取得し、うまく機能しましたが、今度は 2 つの文字列を比較する必要があります。オリジナルは - タグから<li>直接取得されます。<span>解析されるのは、結合された4 つまたは 5 つの です。

$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 に答える