高中老師說:如果什麼事情你沒有弄好,它就會像幽靈一樣一直跟著你,直到你解決它為止。

裝了 Wordpress 之後,才開始聽過(不是知道)RSS這樣東西。可是不知道為什麼,每次點選自己的 feed 總是會看見像這樣的錯誤訊息:


XML Parsing Error: xml processing instruction not at start of external entity
Line Number 3, Column 2: <?xml version="1.0" encoding="utf-8"?>

以前的解決方法就是:既然這行有錯,那我就砍了它好了。所以就用 vim 把所有找到<?xml version=”1.0″ encoding=”utf-8″?>這行的都把它 mark 起來。

不過每次升級都要這樣幹一次,不符合懶人的作風。Trace code 找了半天,wordpress 原來的程式實在看不出哪裡有錯。我用了 telnet 模仿 HTTP 協定去看抓到的 /feed 和別人的有什麼不一樣,發現:我的feed最前面居然多了兩個^M,神秘的斷行符號!於是又跑去看 wordpress 什麼地方可能會有 echo .*\n 這樣的地方,結果… 實在不覺得那些地方會是有錯的。痛定思痛,決定要請 google 大神幫我找出問題到底在哪裡。

結果在 Wordpress 老家看到這篇《XML Parsing Error: xml processing instruction not》,裡面基本上沒有什麼徹底的解法,不過有人提到可能會是 plugin 有問題。建議先把所有的 plugin deactive 看看。

傑克,這真是太神奇了,這樣就好了!可是一些我自己覺得好用的功能也沒了。於是就開始一個個把 plugin 加回去,每加一個就測試看看哪個會毀掉。結果這樣測試下來就發現是: Paged Comment EditingSearch Comment這兩個 plugin 有問題。(現在的版本似乎已經沒有這個問題了)

我先對其中一個plugin用 vim 做了這個動作:

:g/^[ \t\n]*$/d

然後再把這個 plugin 加回去。喔~居然好了。

比對一下這兩個 plugin,發現它們都有個特點,就是在檔案結尾的地方,都是以空白行(Ending file with spacelines)結束的。所以兩個 plugin 剛好每個都只有一行空白行,一加一等於二,很好,這就是為什麼我會拿到兩個^M的原因了。

下次,我會記得裝一個新的 plugin 的時候,去檢查它 ?>的結尾符號後面有沒有空白行。