2014-10-19 89 views
0

我使用cURL來獲取META網頁描述。以下是代碼部分:如何忽略屬性值的字符大小寫?

$metas = $doc->getElementsByTagName('meta'); 

    for ($i = 0; $i < $metas->length; $i++) 
    { 
     $meta = $metas->item($i); 
     $metaname = $meta->getAttribute('name'); 
     if($metaname == 'description') 
       $description = $meta->getAttribute('content'); 
    } 
    <META name="description" content="<?php echo $description; ?>" /> 

它工作正常,但並不完美。當元素屬性或值的字符大小寫與定義的不同時,會發生問題。例如,如果META屬性「name」或其值「description」爲大寫(NAME,DESCRIPTION)或大寫(Name,Description),則上述代碼將不會輸出內容值。

如何解決這個問題,而沒有太多的代碼?

回答

1

您也可以嘗試PHP的strcasecmp()

小case
if (strcasecmp($metaname, 'description') == 0) { 
    //equals 
} 

而且,根據this SO answerstrcasecmp()strtolower()方法是在然而使用strtolower()速度O(N)分配一個新的字符串來保存結果這反過來又增加存儲器的壓力和降低性能

PHP Doc

+0

我剛發現問題也可能發生在我試圖獲取的任何元素上。是否有任何一行代碼可以處理頁面上的所有元素,而不是爲每個元素都複製它? – netizen0911 2014-10-19 17:19:35

+0

我不認爲這是可能的,因爲PHP不知道要轉換哪些,除非它實際讀取它們。 – Rajesh 2014-10-19 17:21:09

1

你可以用用strtolower使所有字符$ metaname
修改您的IF-條件下

if(strtolower($metaname) == 'description') 
$description = $meta->getAttribute('content'); 
+0

我剛發現該問題也可能發生在我試圖獲取的任何元素上。是否有任何一行代碼可以處理頁面上的所有元素,而不是爲每個元素都複製它? – netizen0911 2014-10-19 17:09:35