我正在使用CakePHP 1.3.7並遇到了一個非常特殊的問題。CakePHP 1.3警告array_merge清理
在我的應用程序中使用的Sanitize核心類方法是版本1.2中的一個。當我想保存的特定數據,它給了我一個警告:
警告:array_merge():參數#2不 數組/usr/share/php/cake/libs/sanitize.php上行113
但它確實保存,並具有正確的編碼/格式。
這裏是誰導致此警告的方法(版本1.2,這不就行了113,但我會走到那以後)
function html($string, $remove = false) {
if ($remove) {
$string = strip_tags($string);
} else {
$patterns = array("/\&/", "/%/", "/</", "/>/", '/"/', "/'/", "/\(/", "/\)/", "/\+/", "/-/");
$replacements = array("&", "%", "<", ">", """, "'", "(", ")", "+", "-");
$string = preg_replace($patterns, $replacements, $string);
}
return $string;
}
下面是如何調用該方法
$value = Sanitize::html($value,true);
現在你可以看到,array_merge()是不是在這個方法中調用,但如果我用1.3版本替換HTML()方法
function html($string, $options = array()) {
static $defaultCharset = false;
if ($defaultCharset === false) {
$defaultCharset = Configure::read('App.encoding');
if ($defaultCharset === null) {
$defaultCharset = 'UTF-8';
}
}
$default = array(
'remove' => false,
'charset' => $defaultCharset,
'quotes' => ENT_QUOTES
);
$options = array_merge($default, $options);
if ($options['remove']) {
$string = strip_tags($string);
}
return htmlentities($string, $options['quotes'], $options['charset']);
}
array_merge()正好落在上線113
如果我現在請HTML()這樣
$value = Sanitize::html($value,array('remove' => true));
我沒有得到警告了。但是,我的數據不再以正確的編碼/格式保存。
這裏的文本的示例我需要保存(它是法語,需要UTF-8編碼)
L'envoi D'UNE通信&點菜Fenêtre兩家
我不能牛逼克服這個做
$value = Sanitize::html($value,array('remove' => true, 'quotes' => ENT_HTML401));
因爲我使用PHP 5.3.6所以我不能用恆定的ENT_HTML401
如果我使用另一個常量,如ENT_NOQUOTES,它會忽略引號(顯然),但不是法國口音和其他特殊字符,這是以這種方式工作,但我想保存文本完全像我引用的(或至少閱讀)。
我猜我不需要使用htmlentities,但我認爲這是更安全的和更新的核心方法是我發現沒有得到警告的唯一方法。我還想我不應該修改這些文件而不是更新它們?
所以,簡單地說,我想:
- 擺脫 以正確的格式
- 保存/讀取數據
我可能忘記了一些相關信息,感謝
的警告