8Dle
Авторизация

Проблема Sape и кириллических символов в URL

Проблема Sape и кириллических символов в URL


Перенеся сайт на новый хостинг, столкнулся с проблемой в системе Sape и URL’ами, содержащими кириллические символы. Система индексировала данные страницы, но из-за какой-то ошибки не добавляла купленные ссылки на них и впоследствии купленные ссылки попадали в Error. Пришлось немного помозговать и поискать на разных источниках решения данной проблемы.

Во-первых. Никаких кириллических символов в URL, как таковых, нет и быть не может! Для этого используется особое кодирование. То есть сначала каждый символ кодируется в Юникоде (UTF-8) в последовательность из двух байт, а потом каждый байт данной последовательности записывается в шестнадцатеричном представлении. Перед каждым таким шестнадцатеричным кодом байта, согласно спецификации URL ставится знак процента (%).

Сайт работает на CMS Livestreet ,а там как знаете используется шаблонизатор Smarty и различные способы описанные на форуме sape не подходят.

Рассмотрим на примере
В строке вида:
http://neopier.com/tag/комедия/
http://neopier.com/tag/скачать%20с%20торрента/ 

Слова кодируется в URL’е примерно так:
%D0%B2%D0%BE%D0%BB%D0%BE%D0%BA%D0%BE%D0%BB%D0%B0%D0%BC%D1%81%D0%BA 

Вот как происходит преобразование:
в ? D0 и B2 ? %D0%B2
о ? D0 и BE ? %D0%BE
л ? D0 и BB ? %D0%BB
о ? D0 и BE ? %D0%BE

Таким способом можно закодировать практически любой символ.
Во-вторых. Стандартный скрипт Sape не правильно декодирует такие ссылки, а, следовательно, скрипт уже не может поставить ссылку на страничку. Вследствие чего ссылки попадают в Error.

Для того чтобы не возникало таких проблем, нам достаточно добавить пару строк в код Sape.

Если стандартный скрипт вызова выглядит так: 
<?php 
	    global $sape;
	    if (!defined('_SAPE_USER')){
	        define('_SAPE_USER', 'ваш_персональный_код'); 
	    }
	    require_once($_SERVER['DOCUMENT_ROOT'].'/'._SAPE_USER.'/sape.php'); 
	    $sape = new SAPE_client();
	?> 

В коде нам необходимо заменить строку: 
$sape = new SAPE_client(); 

На: 
if(preg_match("/[а-яА-Я]/", $_SERVER['REDIRECT_URL'])){
	$_SERVER['REDIRECT_URL'] = str_replace("%2F","/", urlencode($_SERVER['REDIRECT_URL']));
	}
	$o['request_uri'] = $_SERVER['REDIRECT_URL'];
	$sape = new SAPE_client($o); 

То есть мы получим следующий код:
<?php 
	    global $sape;
	    if (!defined('_SAPE_USER')){
	        define('_SAPE_USER', 'ваш_персональный_код '); 
	    }
	    require_once($_SERVER['DOCUMENT_ROOT'].'/'._SAPE_USER.'/sape.php'); 
	    if(preg_match("/[а-яА-Я]/", $_SERVER['REDIRECT_URL'])){
	    $_SERVER['REDIRECT_URL'] = str_replace("%2F","/", urlencode($_SERVER['REDIRECT_URL']));
	    }
	    $o['request_uri'] = $_SERVER['REDIRECT_URL'];
	    $sape = new SAPE_client($o);
	?> 

Таким образом, с помощью данного условия скрипт декодирует только кириллические символы, не затрагивая при этом латинские.
Работа скрипта проверенна в DLE и Livestreet

Жмите на Кнопу ниже, или подписывайтесь!


Читайте также
Информация
Посетители, находящиеся в группе Гости, не могут оставлять комментарии к данной публикации.
См. письменные столы для школьников 2x2x2.ru/pismennye_stoly_dlya_shkolnikov .
2x2x2.ru
Екатерина Босов ссылка
timeout.ru


Dle это движок который изначально проектировался для создания новостных сайтов, но по мере своего развития движка значительно расширил свою функциональность и стал универсальным средством разработки и сопровождения сайтов и блогов различной направленности и тематики. По сравнению с другими бесплатными (и некоторыми платными) CMS системами движок dle обладает довольно обширными возможности.

Авторизация