ということで、タイトル通り。
みたいなチルダが入っている値だと、入力エラーになる。
調べてみると、ちらほら同じような人が見つかる。
CakePHPのvalidateで、チルダが入っているとURLとして認識してくれない « 15Pub
CakePHP-ja tumblr - Validation::url() が URL の ~ に反応する件への
けど、具体的な解決策が見つからなかったので、コードを晒しておく。
参考サイトを真似してvalidCharsにチルダを追加しておいた。
cake/libs/validation.phpに手を入れるのは嫌なので、app/app_model.phpに上記を追加。
んー、チルダをURLに含むべきではないってのはそうかもしれないんだけど、柔軟に対応して欲しいところだね。
http://hogehoge.com/~fooみたいなチルダが入っている値だと、入力エラーになる。
調べてみると、ちらほら同じような人が見つかる。
CakePHPのvalidateで、チルダが入っているとURLとして認識してくれない « 15Pub
CakePHP-ja tumblr - Validation::url() が URL の ~ に反応する件への
けど、具体的な解決策が見つからなかったので、コードを晒しておく。
# app/app_model.php
function url($data, $strict = false) {
$check = is_array($data) ? array_shift($data) : $data;
$_this =& Validation::getInstance();
$_this->check = $check;
$validChars = '([' . preg_quote('~!"$&\'()*+,-.@_:;=') . '\/0-9a-z]|(%[0-9a-f]{2}))'; // 「~」を追加
$_this->regex = '/^(?:(?:https?|ftps?|file|news|gopher):\/\/)' . ife($strict, '', '?') .
'(?:' . $_this->__pattern['ip'] . '|' . $_this->__pattern['hostname'] . ')(?::[1-9][0-9]{0,3})?' .
'(?:\/?|\/' . $validChars . '*)?' .
'(?:\?' . $validChars . '*)?' .
'(?:#' . $validChars . '*)?$/i';
return $_this->_check();
}参考サイトを真似してvalidCharsにチルダを追加しておいた。
cake/libs/validation.phpに手を入れるのは嫌なので、app/app_model.phpに上記を追加。
んー、チルダをURLに含むべきではないってのはそうかもしれないんだけど、柔軟に対応して欲しいところだね。

