Перейти к содержимому


Фотография
- - - - -

Элемент Link - как сделать, чтобы принимал домены .рф?

русскоязычные домены домены россии русские домены домены

Лучший Ответ Iv_Le , 22 March 2016 - 17:26

Поковырялся. Изучил основы регулярных выражений. Я красаучег.

 

1. Ищем файл administrator\components\com_zoo\classes\validator.php

2. Там ищем кусок кода (ниар 758 строка)

const REGEX_URL ='/^(%s):\/\/(([a-z0-9-\\x80-\\xff]+\.)+[a-z]{2,6}|\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3})(:[0-9]+)?(\/?|\/\S+)$/i';

и добавляем из первой части выражения \\x80-\\xff во вторую, чтобы получилось

const REGEX_URL ='/^(%s):\/\/(([a-z0-9-\\x80-\\xff]+\.)+[a-z\\x80-\\xff]{2,6}|\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3})(:[0-9]+)?(\/?|\/\S+)$/i';

Все дело в восьмибитном представлении всех еретических языков.

 

Алсо риад: ISO 8859-5

Энд риад: соответствие символов коду

 

 

К сожалению, нельзя поставить выражение от буквы "А" (xB0) до буквы "я" (xEF). При заполнении элемента link на странице сабмишна говорит, что хочет прям всю таблицу от x80 до xEF.

 

--

 

Надеюсь, Медведев больше не будет трогать русскоязычные энторнэты. Бобров!

Перейти к сообщению


  • Закрытая тема Тема закрыта
Сообщений в теме: 2

#1 Iv_Le

Iv_Le

Отправлено 22 March 2016 - 13:25

Стандартный элемент link не принимает адрес сайта, если домен 1-го уровня представляет собой русские буквы. При этом домен 2-го уровня благополучно принимается на любом языке.

 

Я так понимаю, идет проверка ч/з некий валидатор. Где он лежит и куда добавить домен ".рф"?

 

В файле zoo/elements/link/link.php есть строки:

public function _validateSubmission($value, $params) {
        $values       = $value;

        $validator    = $this->app->validator->create('string', array('required' => false));
        $text         = $validator->clean($values->get('text'));
        $target       = $validator->clean($values->get('target', $this->config->get('default_target', '')));
        $custom_title = $validator->clean($values->get('custom_title'));
        $rel          = $validator->clean($values->get('rel'));

        $value        = $this->app->validator
				->create('url', array('required' => $params->get('required')), array('required' => 'Что-то неправильно с адресом.'))
				->clean($values->get('value'));

		return compact('value', 'text', 'target', 'custom_title', 'rel');
    }

Где это $this->app->validator

 

Спасибо.


  • 0

#2 SmetDenis

SmetDenis

Отправлено 22 March 2016 - 14:31

Все валидаторы ZOO находятся тут
administrator\components\com_zoo\classes\validator.php

Там можно найти класс AppValidatorUrl c длинным регулярным выражением.
Если ссылка подходит под выражение, то валидация пройдет.

Возможные решения
- усложнить регулярку для работы с кириллицей и utf-8
- упростить регулярку
- использовать idn функции (правильный вариант, но сложный).
- сделать свой класс валидатор по аналогии и подключить его где-нибудь в php код.
  • 1
JBZoo v4.0 и новый чудный мир Open Source GPL
Отключайте проверку лицензий как можно скорее!



— Есть два типа людей: Кто еще не делает бекапы и кто уже делает бекапы.


#3 Iv_Le

Iv_Le

Отправлено 22 March 2016 - 17:26   Лучший Ответ

Поковырялся. Изучил основы регулярных выражений. Я красаучег.

 

1. Ищем файл administrator\components\com_zoo\classes\validator.php

2. Там ищем кусок кода (ниар 758 строка)

const REGEX_URL ='/^(%s):\/\/(([a-z0-9-\\x80-\\xff]+\.)+[a-z]{2,6}|\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3})(:[0-9]+)?(\/?|\/\S+)$/i';

и добавляем из первой части выражения \\x80-\\xff во вторую, чтобы получилось

const REGEX_URL ='/^(%s):\/\/(([a-z0-9-\\x80-\\xff]+\.)+[a-z\\x80-\\xff]{2,6}|\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3})(:[0-9]+)?(\/?|\/\S+)$/i';

Все дело в восьмибитном представлении всех еретических языков.

 

Алсо риад: ISO 8859-5

Энд риад: соответствие символов коду

 

 

К сожалению, нельзя поставить выражение от буквы "А" (xB0) до буквы "я" (xEF). При заполнении элемента link на странице сабмишна говорит, что хочет прям всю таблицу от x80 до xEF.

 

--

 

Надеюсь, Медведев больше не будет трогать русскоязычные энторнэты. Бобров!


  • 1




Click to return to top of page in style!