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


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

Zoo. Подача материала с фронтенда, русский домен в элементе "ссылка"


В теме одно сообщение

#1 Иван Чудаков

Иван Чудаков

Отправлено 26 January 2017 - 11:06

joomla 3.6.5

Zoo 3.3.24

В элемент ссылка (Link) c фронтенда не добавляются домены на русском языке, например, сайт.рф. 

Из административной части все добавляется. 

кто сталкивался и решал/решил такую проблему?  

 

предположительно работает вот эта проверка

administrator\components\com_zoo\classes\validator.php
строка  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';

замена на
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';

 

эффекта не дает, английские так же добавляются, а русские - нет.

 

может еще в самой joomla надо что-то подправить? 

 



#2 Иван Чудаков

Иван Чудаков

Отправлено 27 January 2017 - 20:20

решил головоломку, правильно пишут

 

Если у программиста есть проблема и он думает — «Я решу ее при помощи регулярных выражений», то с этого момента у программиста уже две проблемы.

 

 

до разработчиков Zoo вряд ли получится достучаться, может хоть в JBzoo найдет применение и вообще кому-нибудь пригодится


русские символы скрываются в последовательности  

\\x80-\\xff

так что надо было только добавить домен рф 

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';

однако, ключ /i - ignore case - не применяется к русским символам, поэтому 

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';

но, в последнее время столька етих доменов панаделали, поэтому пусть будут сразу все варианты, и подлиннее 

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

Попутно вскрылась еще одна проблема теперь уже с элементом email, т.к. есть вероятность наличия почтовых ящиков на кириллических доменах 

записать в строку 734 файла administrator\components\com_zoo\classes\validator.php

const REGEX_EMAIL = '/^([^@\s]+)@((?:[-a-z0-9\\x80-\\xff]+\.)+([\\x80-\\xff]{2,}|[a-z]{2,}))$/i';

в элементе email проверка выполняется также на вывод, т.е. строку ввести получится, но она не выведется на сайте. 

правим еще 1 или 2 файла:

media\zoo\elements\email\email.php
media\zoo\applications\jbuniversal\elements\email\email.php - кто, когда и зачем его туда записал - не знаю, но пусть лежит

заменить на строку
return preg_match('/[\w!#$%&\'*+\/=?`{|}~^-]+(?:\.[!#$%&\'*+\/=?`{|}~^-]+)*@(?:[A-Z0-9-\\x80-\\xff]+\.)+([\\x80-\\xff]{2,}|[A-Z]{2,})/i', $text);





Click to return to top of page in style!