X

pLog: Html 編輯器 Bug修正

pLog 的 啟用所見即所得(WYSIWYG)文章編輯 這功能很不錯用, 但是有個小Bug, 就是若文章內寫的東西是有關 Html tag, 而且有被 <> 括住的, 若要重新編輯修改文章的時後就發現個小問題.

會發現到之前被 <> 括住的tag, 都會直接秀出原本 <html tag> 代表的樣式(ex: 被 &lt;b&gt; 包住的會變粗體, 不會變成 <b>), 呈現在 WYSIWYG 的編輯器內, 而點 "<>" 的按鈕, 也發現原本內容應該是 &lt; &gt; 的, 都被換成 < > 了. 造成要修改這類的文章相當麻煩.

今天花點時間把這個問題除掉了, 只要簡單修改兩行 code 就搞定了.

會發生上述問題最主要的原因在於.

WYSIWYG 編輯器的聰明功能, 他會自動把 &lt; &gt; &quot; &amp; 換成 < > " & .... 等等的.

可以參考 php 的 htmlentities()htmlspecialchars(), 就是做這類轉換用的.

不過幸好他轉換只會轉換一次(通常一般人寫程式應該也不會轉超過一次), 所以我就想簡單點的做法就是. 要修改的文章在秀出來之前, 我在做一次簡單的轉換, 讓 WYSIWYG 編輯器轉換一次後能正好呈現我要的原始資料.

說的好像很簡單, 實際修改起來, 也確實很簡單 :p

仔細研究一下會轉換的那些 code, 都一定有一個 &, 所以我就只要在資料倒到 WYSIWYG 之前, 先將 & 都換成 &amp; 就可以囉!

之後資料經過 WYSIWYG 就會把 &amp; 轉成 &, 而正好能回復到 &gt; &lt; 等等的這些我要秀的東西.

原理大概就是如上述的這樣子, 再下來來講講實作吧!

實作真的很簡單, 就到自己的 plog/class/view/admin/ 下, 修改 admineditpostview.class.php 這個檔案, 將第 53, 54 行註解起來, 再加上將 & 換成 &amp; 的程式就行了.

修改後的程式碼會如下:

//$this->setValue( "postText", $this->_article->getIntroText());
//$this->setValue( "postExtendedText", $this->_article->getExtendedText());
$this->setValue( "postText", preg_replace('/&/', '&amp;',   $this->_article->getIntroText()));
$this->setValue( "postExtendedText", preg_replace('/&/','&amp;',$this->_article->getExtendedText()));

這樣子就搞定了, 輕鬆又容易唷!!

以下就不是此篇的重點了, 純粹就是一些小心得.

PS: 當初在找這個檔案有個小密技. 在 admin.php 檔案中, 找到

$controller->process( HttpVars::getRequest(), "op");

這行, 在這行前面加 echo "aa";

就會列出

plog/class/view/view.class.php(172): header
plog/class/view/view.class.php(308): adminnewpostview.sendcontenttype
plog/class/view/admin/adminview.class.php(106): view.render
plog/class/view/admin/admintemplatedview.class.php(36): adminview.render
plog/class/view/admin/adminnewpostview.class.php(66): admintemplatedview.render
plog/class/controller/controller.class.php(325): adminnewpostview.render
plog/admin.php(37): admincontroller.process

這些錯誤訊息, 於是就知道程式流程 和 使用哪些 class, 再下來就靠自己小找一下就搞定囉 🙂

Tsung: 對新奇的事物都很有興趣, 喜歡簡單的東西, 過簡單的生活.
Related Post