Created
September 14, 2009 14:54
-
-
Save sasezaki/186699 to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
<?php | |
require_once 'Zend/Loader/Autoloader.php'; | |
Zend_Loader_Autoloader::getInstance()->setFallbackAutoloader(true); | |
//@see http://www.tokumaru.org/d/20090914.html | |
class Zenmondo_Validate_EncodingUTF8 extends Zend_Validate_Abstract | |
{ | |
public function isValid($value) | |
{ | |
if (!mb_check_encoding($value, 'UTF-8')) { | |
return false; | |
} | |
return true; | |
} | |
} | |
//borrowd from Zend_Validate_Regex | |
class Zenmondo_Validate_MbEreg extends Zend_Validate_Regex | |
{ | |
//@override | |
public function isValid($value) | |
{ | |
if (!is_string($value) && !is_int($value) && !is_float($value)) { | |
$this->_error(self::INVALID); | |
return false; | |
} | |
$this->_setValue($value); | |
$status = mb_ereg($this->_pattern, $value); | |
if (false === $status) { | |
//require_once 'Zend/Validate/Exception.php'; | |
throw new Exception("Internal error matching pattern '$this->_pattern' against value '$value'"); | |
} | |
if (!$status) { | |
$this->_error(self::NOT_MATCH); | |
return false; | |
} | |
return true; | |
} | |
} | |
$validator = new Zend_Validate(); | |
$validator->addValidator(new Zenmondo_Validate_EncodingUTF8) | |
->addValidator(new Zenmondo_Validate_MbEreg('\\A[[:^cntrl:]]*\\z')) | |
->addValidator(new Zend_Validate_StringLength(0, 10)); | |
var_dump(mb_regex_encoding()); //EUC-JP | |
var_dump($validator->isValid("test")); //true | |
var_dump($validator->isValid("\xc0\xaf")); //false | |
var_dump($validator->isValid("%C0%AF")); //true | |
var_dump($validator->isValid(rawurldecode('%C0%AF'))); //false | |
//var_dump($validator->isValid(rawurldecode('C0%AF'))); //throw Exception | |
echo '-----', PHP_EOL; | |
//mb_regex_encoding('ISO-8859-1'); | |
//mb_regex_encoding('UTF-8'); | |
mb_regex_encoding('ASCII'); | |
var_dump($validator->isValid("test")); //true | |
var_dump($validator->isValid("日本語")); //true | |
var_dump($validator->isValid("\xc0\xaf")); //false | |
var_dump($validator->isValid("%C0%AF")); //true | |
var_dump($validator->isValid(rawurldecode('%C0%AF'))); //false | |
var_dump($validator->isValid(rawurldecode('C0%AF'))); // false | |
var_dump($validator->isValid(rawurldecode(rawurlencode("日本語")))); //true | |
echo '-----', PHP_EOL; | |
mb_regex_encoding('ISO-8859-1'); | |
var_dump($validator->isValid(rawurldecode('C0%AF'))); //false |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment