كيفية الحصول على نوع المحتوى باستخدام HTML بسيط دوم؟
-
19-09-2019 - |
سؤال
حاولت 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 قد تكون.