كيفية الحصول على نوع المحتوى باستخدام HTML بسيط دوم؟

StackOverflow https://stackoverflow.com/questions/2213675

سؤال

حاولت find('meta[http-equiv="Content-type"]') لكنه فشل في استرداد هذه المعلومات.

هل كانت مفيدة؟

المحلول

Simplehtmldom لا تستخدم حرفي السلسلة المقتبسة في المحدد. انه فقط elem[attr=value]. وبعد ومقارنة القيمة يبدو أن حساسة لحالة الأحرف (قد تكون هناك طريقة لجعلها غير حساسة للحالة، لكنني لا أعرف) *

على سبيل المثال

require 'simple_html_dom.php';
$html = file_get_html('http://www.google.com/');
// most likely one one element but foreach doesn't hurt
foreach( $html->find('meta[http-equiv=content-type]') as $ct ) { 
  echo $ct->content, "\n";
}

مطبوعات text/html; charset=ISO-8859-1.

تحرير: نعم، هناك طريقة لإجراء مباراة غير حساسة للحالة، واستخدام *= بدلا من =

find('meta[http-equiv*=content-type]')

Edit2: BTW ذلك http-equiv*=content-type شيء سوف تتطابق أيضا <meta http-equiv="haha-no-content-types"... (لا يختبر فقط إذا كانت السلسلة في مكان ما في قيمة السمة). لكنها وظيفة / مشغل غير حساس للحالة الوحيدة التي يمكنني العثور عليها. أعتقد أنك تستطيع العيش معها في هذه الحالة ؛-)
تحرير 3: يستخدم Preg_Match ("... / I") ويتم تمرير النمط / المحدد مباشرة إلى هذه الوظيفة. لذلك أنت استطاع افعل شيئا مثل http-equiv*=^content-type$ كثيرا http-equiv="Content-type" لكن لا http-equiv="xyzContent-typeabc". وبعد لكنني لا أعرف ما إذا كانت هذه ميزة مبررة.

نصائح أخرى

عادة ما يكون نوع المحتوى جزءا من رؤوس استجابة HTTP - وليس في الجسم. من أين حصلت على مستند XML من؟

وأود أن أذهب foreach على $this->find('meta'); في حالة كتابة مختلفة content-type - أعتقد أن المتصفحات ليست في هذه الحالة حساسة لحالة الأحرف، في حين أن PHP قد تكون.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top