2009-08-20 28 views
1

我想實現一個字典型服務。 我使用cURL向dict.org發送了使用dict協議的php請求。 這是我的代碼(這對自己的作品,並可能對未來的讀者有所幫助):如何在PHP中以用戶友好的方式解析dict輸出?

$ch = curl_init(); 
curl_setopt($ch, CURLOPT_URL, "dict://dict.org/define:(hello):english:exact"); 
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); 
$definition = curl_exec($ch); 
curl_close($ch); 

echo $definition; 

服務器返回的定義,符合市場預期,與幾個頭沿(即我不需要)。響應看起來是這樣的:

220 miranda.org dictd 1.9.15/rf on Linux 2.6.26-2-686 <auth.mime> <[email protected]> 
250 ok 
150 3 definitions retrieved 
151 "Hello" gcide "The Collaborative International Dictionary of English v.0.48" 
Hello \Hel*lo"\, interj. & n. 
    An exclamation used as a greeting, to call attention, as an 
    exclamation of surprise, or to encourage one. This variant of 
    {Halloo} and {Holloo} has become the dominant form. In the 
    United States, it is the most common greeting used in 
    answering a telephone. 
    [1913 Webster +PJC] 
(... some content removed) 

. 
250 ok [d/m/c = 3/0/162; 0.000r 0.000u 0.000s] 
221 bye [d/m/c = 0/0/0; 0.000r 0.000u 0.000s] 

我在想,如果:

一)有沒有一種方法來指定捲曲(或字典協議的選項)來無回所有額外信息(即250 ok [d/m/c = 3/0/162; 0.000r...]

b)您可能注意到,字典響應返回的信息不是以用戶友好的方式顯示的。我想知道是否有人知道任何現有的PHP庫,這將允許我以更好的方式顯示這個。否則,我不得不編碼我自己的。

c)如果這不是大多數字典網站檢索他們的定義的方式,他們是如何做到的?在我的理解中,最全面的字典數據庫是dict.org(它支持dict protocol,並且是我發送我的cURL請求的地方)。

謝謝!

回答

1

在我開始之前讓我說我不知道​​字典協議的具體情況。

我懷疑你能夠創建一個只傳遞文本的請求。您希望放棄的信息看起來像狀態信息,因此很有用。

我處理這個問題的方法如下:

  1. 閱讀捲曲響應數據到一個數組,使得每一行是在陣列中的單獨的條目。您可以使用explode()並在新行字符(\ n)處進行拆分。
  2. 迭代陣列EG for ($response as $responseLine) {}
  3. 在$ responseLine上執行正則表達式(或其他形式的模式匹配)來查找定義。它看起來像實際的文本是唯一的$ responseLine不以數字開頭。

您可能想檢查字典協議使用的字符集。我沒有提到任何錯誤處理,但應該是直截了當的。

+0

謝謝!你碰巧知道做什麼? – 2009-08-21 19:22:02

+0

這正是我如何去做的。謝謝! – 2009-08-22 20:48:44

相關問題