Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770
Форумы портала PHP.SU :: Версия для печати :: обработка кирилических доменов сложный запрос регулярки
Форумы портала PHP.SU » PHP » Регулярные выражения » обработка кирилических доменов сложный запрос регулярки

Страниц (1): [1]
 

1. Acbir - 05 Февраля, 2015 - 13:48:20 - перейти к сообщению
не могу совместить две регулярки. есть две рабочие регулярки, помогите совместить никак не получается мозг уже взорвался
это корректно преобразует кирилические домены в латинские
PHP:
скопировать код в буфер обмена
  1. $str = preg_replace("/(\w+)/e","strtolower(idn_to_ascii(iconv('cp1251', 'utf-8','$1')))", "http://igum16-1.инфф.рф/f15.php");

эта корректно меняет латинские на гиперссылки
PHP:
скопировать код в буфер обмена
  1. $text = preg_replace('#(?<!\])\bhttps://(?!youtube.com/)(?!youtu.be/)(?!www.youtube.com/)(?!www.youtu.be/)[^\s\[<]+#i',"<a href=./goto.html?$0 target=_blank rel=nofollow>$0</a>",$text);

работает и меняет все как надо
но у меня не получается все отладить в одном нужном запросе
PHP:
скопировать код в буфер обмена
  1. $text = preg_replace('#(?<!\])\bhttp://(?!youtube.com/)(?!youtu.be/)(?!www.youtube.com/)(?!www.youtu.be/)[^\s\[<]+#ei',"strtolower(idn_to_ascii(iconv('cp1251', 'utf-8','$0')))",$text);
  2.  

вот нормально работающий код меняет http://igum16-1[dot]инфф[dot]рф/f15.php на http://igum16-1[dot]xn--h1akva[dot]xn--p1ai/f15.php
а у меня выводит http://igum16-1[dot]xn--h1akva[dot]xn--/f15-f6dy.php
, но http://igum16-1[dot]инфф[dot]рф и там и там все нормально http://igum16-1[dot]xn--h1akva[dot]xn--p1ai
плюс это просто замена домена, но еще остается преобразование в гипер ссылку, с этим вообще беда, как только не пробую делать, если в конструкцию вставляю
PHP:
скопировать код в буфер обмена
  1.  $text = preg_replace('#(?<!\])\bhttp://(?!youtube.com/)(?!youtu.be/)(?!www.youtube.com/)(?!www.youtu.be/)[^\s\[<]+#ei',"strtolower(idn_to_ascii(iconv('cp1251', 'utf-8','<a href=./goto.html?$0 target=_blank rel=nofollow>$0</a>')))",$text);
  2.  

то касячит наверное по причине ошибки описанной чуть выше, но хотелось бы чтоб работало как то так
PHP:
скопировать код в буфер обмена
  1.  $text = preg_replace('#(?<!\])\bhttp://(?!youtube.com/)(?!youtu.be/)(?!www.youtube.com/)(?!www.youtu.be/)[^\s\[<]+#ei',"<a href=./goto.html?$0 target=_blank rel=nofollow>(strtolower(idn_to_ascii(iconv('cp1251', 'utf-8','$0'))))</a>",$text);
  2.  

то есть меняло ссылку в тегах, а не в тексте

должно множество ссылок плана:
CODE (html):
скопировать код в буфер обмена
  1. http://igum16-1.инфф.рф/

преобразовать в

CODE (html):
скопировать код в буфер обмена
  1. <a href="./goto.html?http://igum16-1.xn--h1akva.xn--p1ai/" target="_blank" rel="nofollow">http://igum16-1.инфф.рф/</a>
  2.  
2. Acbir - 06 Февраля, 2015 - 11:06:29 - перейти к сообщению
жаль что не нашлось тех кто помог бы , тема не актуальна
3. GoDr - 06 Февраля, 2015 - 11:31:08 - перейти к сообщению
Acbir, уточняю...
у тебя есть где-то в тексте
Цитата:
http://igum16-1.инфф.рф/
и их нужно преобразовать в
Цитата:
<a href="./goto.html?http://igum16-1.xn--h1akva.xn--p1ai/" target="_blank" rel="nofollow">http://igum16-1.инфф.рф/</a>

Так?

PS
Acbir пишет:
жаль что не нашлось тех кто помог бы , тема не актуальна
Ну так сначала задал бы вопрос, а не выкладывал бы решение Радость
4. Acbir - 06 Февраля, 2015 - 15:46:19 - перейти к сообщению
GoDr пишет:
Acbir, уточняю...
у тебя есть где-то в тексте
Цитата:
http://igum16-1.инфф.рф/
и их нужно преобразовать в
Цитата:
<a href="./goto.html?http://igum16-1.xn--h1akva.xn--p1ai/" target="_blank" rel="nofollow">http://igum16-1.инфф.рф/</a>

Так?

да, таких и других ссылок может быть множество
счас проблема возникает немного другого плана
PHP:
скопировать код в буфер обмена
  1. $html=" 1 http://youtu.be/FLfaXSmS-Ys<br>http://igum16-1.инфф.рф/<br>http://igum16-1.инфф.рф<br>http://IGum16-1.инфф.рф<br>http://igum16-1.ИНфф.рф<br>http://igum16-1.инфф.рф/f15.php<br>http://y.com<br>http://youtube.com<br>http://youtu.be<br>http://sdgwegy.com<br>http://y.com/<br>http://youtube.com/<br>http://www.y.com/<br>http://www.youtube.com/";
  2.     '#(?<!\])\bhttp://(?!youtube.com/)(?!youtu.be/)(?!www.youtube.com/)(?!www.youtu.be/)[^\s\[<]+#i',
  3.     function ($m) {
  4.     return $m[0].' - -> '.idn_to_ascii(iconv('cp1251', 'utf-8', $m[0])).' !!!  ';
  5.     },
  6.     $html
  7. );
  8. echo"<hr>$html<hr>";

результат почти гуд, но есть затык как я понимаю idn_to_ascii если я прально понял то происходит дополнительное экранирование, и команда применяется на значение с этим экранированием, как его обойти?
пример правильной выдачи
http://igum16-1[dot]инфф[dot]рф - -> http://igum16-1[dot]xn--h1akva[dot]xn--p1ai !!!
а тут уже касячит Недовольство, огорчение
http://igum16-1[dot]инфф[dot]рф/ - -> http://igum16-1[dot]xn--h1akva[dot]xn--/-4tbm !!!
http://igum16-1[dot]инфф[dot]рф/f15.php - -> http://igum16-1[dot]xn--h1akva[dot]xn--/f15-f6dy.php !!!

 

Powered by ExBB FM 1.0 RC1