DEDE織夢cms常用的參數標簽匯總、以及操作過程中的一些bug問題解決方法,dede網站二開,以下龍騰飛網絡科技-小吳在建站實操中筆記記錄,織夢dede建站教程保存使用非常方便:
【DEDE建站教程】dede后臺部分頁面錯誤;htmlspecialchars問題
dede網站,GBK2312版本會出現的問題,htmlspecialchars問題,特別在網站搬家后,很多后臺頁面點擊編輯修改會出現某個php的某一行有問題。
【解決方法】在相關的文件某行后面加上,ENT_COMPAT, GB2312或者是,ENT_COMPAT,'ISO-8859-1'即可,即所以涉及htmlspecialchars的代碼都加上即可。下面歸納了一些可能會出現的問題匯總。以及解決修改方法跟大家說下。
dedecms出現這個問題與代碼無關,主要是和PHP的版本有關,用的PHP5.4,更換成PHP5.2之后就不會有這個問題了。
問題原因是:php5.4版本中htmlspecialchars在php5.4默認為utf8編碼,gbk編碼的字符串經過htmlspecialchars 轉義后的中文字符串為空了,所以造成添加文章時提示“標題不能為空”,編輯文章時編輯器內容空白。
解決的辦法:
1、標題不能為空
修改dede/article_add.php 和 dede/article_edit.php 這2個文件。
把
$title =htmlspecialchars(cn_substrR($title,$cfg_title_maxlen));
改成
$title =htmlspecialchars(cn_substrR($title,$cfg_title_maxlen),ENT_COMPAT, GB2312 );
2、編輯器內容空白
打開 include/ckeditor/ckeditor_php5.php 找到大約 138行
將
htmlspecialchars($value)
替換為
htmlspecialchars($value, ENT_COMPAT, GB2312 )
如果是其它v5.6用fck編輯器的,就打開include/FCKeditor/fckeditor.php找到大約 76行
將
$HtmlValue = htmlspecialchars( $this->Value ) ;
替換為
$HtmlValue = htmlspecialchars($this->Value,ENT_COMPAT , GB2312 );
3、系統站點設置網站名稱、站點默認關鍵字、站點描述也是保存后顯示為空,打開./dede/file_manage_view.php;
搜索
$content= htmlspecialchars($content);
替換成
$content =htmlspecialchars($content,ENT_COMPAT , GB2312 );
4、dede后臺欄目管理--修改欄目--欄目內容修改
出現“/include/ckeditor/ckeditor_php5.php on line 137”
追根溯源,是htmlspecialchars惹的禍,PHP 5.4后GBK編碼下默認不支持中文,轉換后內容為空。
修改DeDeCMS/include/ckeditor/ckeditor_php5.php文件,137行左右;如下代碼:
$out = "<textarea name="" . $name . """ . $attr . ">" . htmlspecialchars($value) . "</textarea> ";
改成如下:
$out = "<textarea name="" . $name . """ . $attr . ">" . htmlspecialchars($value,ENT_COMPAT,'ISO-8859-1') . "</textarea> ";
5、一鍵生成全站后
include/taglib/tag.lib.php on line 86
將
$row['tag'] = htmlspecialchars($row['tag']);
修改成
$row['tag'] = htmlspecialchars($row['tag']);
6、打開/include/common.func.php,搜索“function RunApp”,在這個函數的上面添加織夢新版本新增的函數:dede_htmlspecialchars,具體代碼如下:
function dede_htmlspecialchars($str) { global $cfg_soft_lang; if (version_compare(PHP_VERSION, '5.4.0', '<')) return htmlspecialchars($str); if ($cfg_soft_lang=='gb2312') return htmlspecialchars($str,ENT_COMPAT,'ISO-8859-1'); else return htmlspecialchars($str); }
追根溯源,是htmlspecialchars惹的禍,PHP 5.4后GBK編碼下默認不支持中文,轉換后內容為空。
UTF-8編碼 沒有任何問題。