Транслит и траслитезация url

Транслит и траслитезация url

Транслит, о боже, - вещь незаменимая. Но просто заменить символы иногда недостаточно, особенно когда не понятно, как будет использовать это конечный потребитель. Следующие две функции я написал специально для того чтобы не парится о вводимых данных вовсе.

Кстати второй функцией allowed(), можно проверять не только урлы, но например и мейлы и формы и тд... Между прочим такой способ проверки вводимой строки приминим и к javascript.

<?php

class func {
     
     // транслит
     public function Translit( $var, $type = 'norm' ) {
        $rus = array( 'а' => 'a',   'А' => 'A',     'к' => 'k',    'К' => 'K',     'х' => 'h',    'Х' => 'H',
	                  'б' => 'b',   'Б' => 'B',     'л' => 'l',    'Л' => 'L',     'ц' => 'ts',   'Ц' => 'TS',
                      'в' => 'v',   'В' => 'V',     'м' => 'm',    'М' => 'M',     'ч' => 'ch',   'Ч' => 'CH',
				      'г' => 'g',   'Г' => 'G',     'н' => 'n',    'Н' => 'N',     'ш' => 'sh',   'Ш' => 'SH',
				      'д' => 'd',   'Д' => 'D',     'о' => 'o',    'О' => 'O',     'щ' => 'shch', 'Щ' => 'SHCH',
				      'е' => 'e',   'Е' => 'E',     'п' => 'p',    'П' => 'P',     'ъ' => '',     'Ъ' => '',
				      'ё' => 'e',   'Ё' => 'E',     'р' => 'r',    'Р' => 'R',     'ы' => 'i',    'Ы' => 'I',
				      'ж' => 'g',   'Ж' => 'G',     'с' => 's',    'С' => 'S',     'ь' => '',     'Ь' => '',
				      'з' => 'z',   'З' => 'Z',     'т' => 't',    'Т' => 'T',     'э' => 'e',    'Э' => 'E',
				      'и' => 'i',   'И' => 'I',     'у' => 'u',    'У' => 'U',     'ю' => 'yu',   'Ю' => 'YU',
				      'й' => 'y',   'Й' => 'Y',     'ф' => 'f',    'Ф' => 'F',     'я' => 'ya',   'Я' => 'YA' );
        if( $type == 'link' ) {
            $rus[' '] = '_';
        }
        $result = strtr( $var, $rus );
        return $result;
     }
     
     // допустимые символы формы
     public function allowed( $str, $type = 'allowed' ) {
          $output         = '';
          if    ( $type  == 'allowed' ) {
               $allowed   = "абвгдеёжзийклмнопрстуфхцчшщьъыэюяabcdefghijklmnopqrstuvwxyz0123456789 _-*@!,.#;%&?()'\"№:^[]/\\+=<>"; }
          elseif( $type  == 'numbers' ) {
               $allowed   = '0123456789'; }
          elseif( $type  == 'email' ) {
               $allowed   = 'abcdefghijklmnopqrstuvwxyz0123456789_-@.'; }
          elseif( $type  == 'link' ) {
               $allowed   = 'abcdefghijklmnopqrstuvwxyz0123456789_-.'; }

          else { $allowed = $type; }
          $str            = str_replace( "\n", '
', $str ); $str = array_slice( preg_split( "##u", $str ), 1, -1 ); $allowed = array_slice( preg_split( "##u", $allowed ), 1, -1 ); $max_size = count( $str ); for( $i = 0; $i < $max_size; $i++ ) { if ( in_array( mb_strtolower( $str[$i], "UTF-8" ), $allowed ) == true ) { $output .= $str[$i]; } } if( $type == 'link' ) { $output = mb_strtolower( $output, "UTF-8" ); } return $output; } } $func = new func; $str = 'А чем, вам сударь? Не угодили сии концепции?'; echo $str .'<br />'; echo $func->Translit( $str ). '<br />'; echo $func->Translit( $str, 'link' ). '<br />'; echo $func->allowed( $func->Translit( $str, 'link' ), 'link' ). '<br />';

07 марта 2012, 12:26
PHP


Авторизация
Зайди на сайт с помощью соц. сети:
Тебе — сюда нельзя!!!
На сайте присутствует апокалиптичная тарабарщина
и нецензурная брань.
Хмм... и мне-то вообще-то насрать...
Продолжить
Нет, уйти с сайта