Skip to content

Instantly share code, notes, and snippets.

@sasezaki
Created September 14, 2009 14:54
Show Gist options
  • Save sasezaki/186699 to your computer and use it in GitHub Desktop.
Save sasezaki/186699 to your computer and use it in GitHub Desktop.
<?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