PHP . SU
Программирование на PHP, MySQL и другие веб-технологии
Описание: Экранирует русскоязычные домены в атрибуте href ссылок
Поиск в теме | Версия для печати
Реф
Отправлено: 08 Сентября, 2013 - 02:37:01
Частый гость
Покинул форум
Сообщений всего: 159
Дата рег-ции: Июль 2010
Откуда: Реутов, Россия
Помог: 0 раз(а)
Пример:
PHP:
скопировать код в буфер обмена
<?PHP
header ( 'Content-type: text/html; charset=utf-8' ) ;
$dom = new DOMDocument( '1.0' , 'utf-8' ) ;
$elem = $dom -> createElement ( 'a' , 'россия.рф' ) ;
$elem -> setAttribute ( 'href' , 'http://россия.рф?param=%D1%80%D1%84' ) ;
$html = $dom -> saveHTML ( $elem ) ;
Результат:
А хотелось бы получать:
Можно ли что-то сделать, чтобы saveHTML возвращал то, что нужно?(Отредактировано автором: 08 Сентября, 2013 - 15:49:27)
-----Думать надо головой, а не головкой!
armancho7777777
Отправлено: 08 Сентября, 2013 - 05:34:16
Активный участник
Покинул форум
Сообщений всего: 4526
Дата рег-ции: Февр. 2011
Откуда: Москва
Помог: 221 раз(а)
Нет.
Он их кодирует за Вас.
Не переживайте, ссылки валидные.
(Отредактировано автором: 08 Сентября, 2013 - 05:34:45)
Реф
Отправлено: 08 Сентября, 2013 - 15:55:31
Частый гость
Покинул форум
Сообщений всего: 159
Дата рег-ции: Июль 2010
Откуда: Реутов, Россия
Помог: 0 раз(а)
armancho7777777 пишет: Не переживайте, ссылки валидные.
Браузеры так не считают:
Цитата: Firefox не может найти сервер %d1%80%d0%be%d1%81%d1%81%d0%b8%d1%8f.%d1%80%d1%84.
Цитата: Убедитесь, что веб-адрес http://%d1%80%d0%be%d1%81%d1%81%d0%b8%d1%8f.%d1%80%d1%84 правильный.
(IE)
-----Думать надо головой, а не головкой!
armancho7777777
Отправлено: 08 Сентября, 2013 - 18:07:23
Активный участник
Покинул форум
Сообщений всего: 4526
Дата рег-ции: Февр. 2011
Откуда: Москва
Помог: 221 раз(а)
Ну тогда регулярками правьте.
(Добавление)
PHP:
скопировать код в буфер обмена
class MYDocument extends DOMDocument {
public function saveHTML( $arg = NULL )
{
'~(?<=href=)([\'|"])(?P<href>[^\1]+)\1~' ,
function ( $match ) {
return '"' . urldecode ( $match [ 'href' ] ) . '"' ; } ,
parent:: saveHTML ( $arg )
) ;
}
}
$dom = new MYDocument( '1.0' , 'utf-8' ) ;
$elem = $dom -> createElement ( 'a' , 'россия.рф' ) ;
$elem -> setAttribute ( 'href' , 'http://россия.рф?param=%D1%80%D1%84' ) ;
$html = $dom -> saveHTML ( $elem ) ;
Реф
Отправлено: 08 Сентября, 2013 - 19:10:26
Частый гость
Покинул форум
Сообщений всего: 159
Дата рег-ции: Июль 2010
Откуда: Реутов, Россия
Помог: 0 раз(а)
Любые решения, которые будут пытаться "исправить" то, что возвращает DOMDocument::saveHTML, скорее всего, обречены на провал.
Конкретно Ваше решение возвращает:
вместо нужного
Конечно, можно предложить реализацию MyDocument::saveHTML, которая вернёт то, что нужно конкретно в этом случае (не декодировать параметры запроса), но легко приведу пример, когда и это решение не сработает.
Если сформулировать ещё точнее, необходимо чтобы в атрибуте href на выходе лежало именно то, что в нём было записано методом setAttribute.
Если было:
То на выходе должно быть:
(Отредактировано автором: 08 Сентября, 2013 - 19:10:45)
-----Думать надо головой, а не головкой!
armancho7777777
Отправлено: 09 Сентября, 2013 - 03:01:40
Активный участник
Покинул форум
Сообщений всего: 4526
Дата рег-ции: Февр. 2011
Откуда: Москва
Помог: 221 раз(а)
Реф пишет: Конкретно Ваше решение возвращает:
возвращает корректные ссылки.
Ну раз так принципиально, то вот:
PHP:
скопировать код в буфер обмена
class MYDocument extends DOMDocument {
public function saveHTML( $arg = NULL )
{
'~(?<=href=)([\'|"])(?P<href>[^\1]+)\1~' ,
function ( $match )
{
$host = parse_url ( $match [ 'href' ] , PHP_URL_HOST
) ; $path = parse_url ( $match [ 'href' ] , PHP_URL_PATH
) ;
$match [ 'href' ]
) ;
return '"' . $match [ 'href' ] . '"' ;
} ,
parent:: saveHTML ( $arg )
) ;
}
}
$dom = new MYDocument( '1.0' , 'utf-8' ) ;
$elem = $dom -> createElement ( 'a' , 'россия.рф' ) ;
$elem -> setAttribute ( 'href' , 'http://россия.рф?param=%D1%80%D1%84' ) ;
$html = $dom -> saveHTML ( $elem ) ;
(Отредактировано автором: 09 Сентября, 2013 - 06:46:58)
Поиск в теме | Версия для печати
Страниц (1): [1]
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« Вопросы новичков »
Все гости форума могут просматривать этот раздел. Только зарегистрированные пользователи могут создавать новые темы в этом разделе. Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
Powered by ExBB FM 1.0 RC1. InvisionExBB