Tag: usuwanie

usuwanie znaków specjalnych z kodowania iso-8859-2 latin2

usuwanie znaków specjalnych z kodowania iso-8859-2 latin2

Często zachodzi potrzeba zamiany ogonków na ich graficzne odpowiedniki bez ogonków w kodowaniu ASCII. Najczęściej służy to do przygotowania tekstu wo wyświetlenia w adresie urluri. Lecz niestety jest to zależne od użytego kodowania na stronie jak i bazie danych MYSQL.

Ponieważ najczęściej wykorzystujemy podmianę znaków specjalnych, narodowych, diakrytycznych w przygotowywaniu przyjaznych adresów – friendly URL ze słowami kluczowymi dlatego też potrzebujemy dynamicznej funkcji która to zrobi za nas automatycznie.

Tutaj prezentuję tablice oraz funkcje specjalnie dla kodowania iso-8859-2, znanego pod nazwą latin2, jeszcze inna nazwa to ISO/IEC 8859-2 jak i kodowanie środkowoeuropejskie oraz wschodnioeuropejskie. Może jest to dosć zacofane kodowanie lecz nadal często używane na stronach WWW oraz bazach mysql (latin2) ze względu na obsługę polskich znaków diakrytycznych.

Kodowanie iso-8859-2 obsługuje takie języki jak (pod względem znaków narodowych – specjalnych):

  • Polski
  • Bośniacki
  • Chorwacki
  • Czeski
  • Węgierski
  • Serbski (w transkrypcji łacińskiej)
  • Serbsko-Chorwacki
  • Słowacki
  • Słoweński
  • Górnołużycki
  • Dolnołużycki
  • Angielski
  • Niemiecki
  • sporną kwestią jest język Fiński

Jednakże zalecą się stosowanie kodowań zgodnych z Unicode np. utf-8, ponieważ mimo iż iso-8859-2 wydaje się obsługiwać wiele języków obsługuje ono tylko podstawy i w swoim asortymencie posiada tylko niewiele znaków specjalnych, oraz cała tablica kodowania jest skromna.

O co chodzi w tej konwersji iso-8859-2 to ASCII, otóż o to by zamienić np. nasze polskie ć na jego odpowiednik c który może być obsłużony w adresach URL przez przeglądarki i niestety trzeba postąpić tak z każdym zadaszkowanym i ogonkowym znakiem. Ř -> R i tym podobne…

Poniżej przedstawiam tablice do użytku nie komercyjnego, które ostatnio sobie stworzyłem do przygotowania przyjaznych adresów w kodowaniu iso-8859-2. Są niewrażliwe na kodowanie pliku w którym są zapisane ponieważ korzystają z wartości heksadecymalnych popularnie zwane HEX. Zamieniają każdy znak na jego graficzny odpowiednik, działają z wielkimi jak i małymi literami! Oczywiście zamieniają także polskie znaki!

$map_latin2=array(
"\xa1","\xa3","\xa5","\xa6","\xa7","\xa9","\xaa","\xab","\xac","\xae","\xaf",
"\xb1","\xb3","\xb5","\xb6","\xb9","\xba","\xbb","\xbc","\xbe","\xbf","\xc0",
"\xc1","\xc2","\xc3","\xc4","\xc5","\xc6","\xc7","\xc8","\xc9","\xca","\xcb",
"\xcc","\xcd","\xce","\xcf","\xd0","\xd1","\xd2","\xd3","\xd4","\xd5","\xd6",
"\xd7","\xd8","\xd9","\xda","\xdb","\xdc","\xdd","\xde","\xdf","\xe0","\xe1",
"\xe2","\xe3","\xe4","\xe5","\xe6","\xe7","\xe8","\xe9","\xea","\xeb","\xec",
"\xed","\xee","\xef","\xf0","\xf1","\xf2","\xf3","\xf4","\xf5","\xf6","\xf8",
"\xf9","\xfa","\xfb","\xfc","\xfd","\xfe",
);
//Tablice znakow diakrytycznych 
//dla kodowania iso-8859-2 (latin2)
//by tosiek - https://tosiek.pl/
$map2_latin2=array(
"\x41","\x4c","\x4c","\x53","\x53","\x53","\x53","\x54","\x5a","\x5a","\x5a",
"\x61","\x6c","\x6c","\x73","\x73","\x73","\x74","\x7a","\x7a","\x7a","\x52",
"\x41","\x41","\x41","\x41","\x4c","\x43","\x43","\x43","\x45","\x45","\x45",
"\x45","\x49","\x49","\x44","\x44","\x4e","\x4e","\x4f","\x4f","\x4f","\x4f",
"\x78","\x52","\x55","\x55","\x55","\x55","\x59","\x54","\x73\x73","\x72","\x61",
"\x61","\x61","\x61","\x6c","\x63","\x63","\x63","\x65","\x65","\x65","\x65",
"\x69","\x69","\x64","\x64","\x6e","\x6e","\x6f","\x6f","\x6f","\x6f","\x72",
"\x75","\x75","\x75","\x75","\x79","\x74",
);

Na pierwszy rzut oka nie są czytelne, lecz poniżej prezentuję ich wersję z której odradzam korzystać, ponieważ taki plik z poniższymi tablicami musi być bezwzględnie zapisany w kodowaniu iso-8859-2 (trzeba się pilnować), także do użytku niekomercyjnego:

$map_latin2=array(
'Ą','Ł','Ľ','Ś','§','Š','Ş','Ť','Ź','Ž','Ż',
'ą','ł','ľ','ś','š','ş','ť','ź','ž','ż','Ŕ',
'Á','Â','Ă','Ä','Ĺ','Ć','Ç','Č','É','Ę','Ë',
'Ě','Í','Î','Ď','Đ','Ń','Ň','Ó','Ô','Ő','Ö',
'×','Ř','Ů','Ú','Ű','Ü','Ý','Ţ','ß','ŕ','á',
'â','ă','ä','ĺ','ć','ç','č','é','ę','ë','ě',
'í','î','ď','đ','ń','ň','ó','ô','ő','ö','ř',
'ů','ú','ű','ü','ý','ţ',
);
//Tablice znakow diakrytycznych 
//dla kodowania iso-8859-2 (latin2)
//by tosiek - https://tosiek.pl/
$map2_latin2=array(
'A','L','L','S','S','S','S','T','Z','Z','Z',
'a','l','l','s','s','s','t','z','z','z','R',
'A','A','A','A','L','C','C','C','E','E','E',
'E','I','I','D','D','N','N','O','O','O','O',
'x','R','U','U','U','U','Y','T','ss','r','a',
'a','a','a','l','c','c','c','e','e','e','e',
'i','i','d','d','n','n','o','o','o','o','r',
'u','u','u','u','y','t',
);

Posiadając tablice znaków diakrytycznych możemy zamienić te znaki na ich odpowiedniki – funkcja str_replace(), lecz to nie jest całkowite przygotowanie adresów URL należy się także pozbyć znaków specjalnych, przestankowych i tym podobnych, które nie są obsługiwane w adresach. Tutaj wykorzystamy wyrażenia regularne (regular expressions) – funkcja preg_replace(), które zamienią każdy znak nie wchodzący w skład wyrazów na myślniki (-) lub podkreślniki – znaki podkreślenia (_), zależy kto jak woli, następnie musimy usunąć te znaki z początku i końca, wykorzystamy funkcję trim() z dodatkowym parametrem.

Ci którzy chcą by adresy były złożony tylko z małych liter muszą użyć funkcji strtolower()

Adresy URL – URI ze słowami kluczowymi

Wiec zaczynamy sobie pisać funkcję specialchar_latin2() która jako jedyny argument przyjmuje ciąg który przygotowuje do wyświetlenia adresu URL:

function specialchar_latin2($url) {
//specialchar_latin2 by tosiek https://tosiek.pl/
	global $map_latin2,$map2_latin2;
	$url = str_replace($map_latin2,$map2_latin2,$url);
	return $url;
}

Należy pamiętać by tablice ze znakami narodowymi były zdefiniowane poza – przed funkcją. Ciąg zażółć?gęślą !?jaźń;;\ZAŻÓŁĆ []GĘŚLĄ (JAŹŃ-- po przejściu przez tę funkcję będzie miał postać: zazolc?gesla !?jazn;;\ZAZOLC []GESLA (JAZN–, nie nadaje się do wykorzystania w adresie.
Jak na razie funkcja zamienia tylko znaki narodowe z tablic, dodajmy do niej wyrażenie regularne zamieniające wszystko co nie jest znakiem wchodzącym w skład słów i występujące jeden raz lub więcej na myślnik – (kto woli podkreślnik _), posłużymy się zdefiniowaną klasą negującą znaki wchodzące w skład słów \W

function specialchar_latin2($url) {
//specialchar_latin2 by tosiek https://tosiek.pl/
	global $map_latin2,$map2_latin2;
	$url = str_replace($map_latin2,$map2_latin2,$url);
	$url = preg_replace('#[\W]{1,}#','-',$url);
	return $url;
}

Teraz zamieniamy wszystko co zbędne (spacje, wykrzykniki, znaki zapytanie i tym podobne na myślniki. Ciąg zażółć?gęślą !?jaźń;;\ZAŻÓŁĆ []GĘŚLĄ (JAŹŃ-- po przejściu przez funkcję miałby postać: zazolc-gesla-jazn-ZAZOLC-GESLA-JAZN-, lecz jak widać pozostał myślnik na końcu, może także czasami pozostać na początku co jest całkowicie zbędne, użyjemy funkcji trim() do jego usunięcia:

function specialchar_latin2($url) {
//specialchar_latin2 by tosiek https://tosiek.pl/
	global $map_latin2,$map2_latin2;
	$url = str_replace($map_latin2,$map2_latin2,$url);
	$url = preg_replace('#[\W]{1,}#','-',$url);
	$url = trim($url,'-');
	return $url;
}

Teraz ciąg miałby postać: zazolc-gesla-jazn-ZAZOLC-GESLA-JAZN, a co jeśli byśmy chcieli by składał się z małych estetycznych liter? Wystarczy skorzystać z funkcji strtolower() zamieniającej wielkie litery na małe.

function specialchar_latin2($url) {
//specialchar_latin2 by tosiek https://tosiek.pl/
	global $map_latin2,$map2_latin2;
	$url = str_replace($map_latin2,$map2_latin2,$url);
	$url = preg_replace('#[\W]{1,}#','-',$url);
	$url = trim($url,'-');
	$url = strtolower($url);
	return $url;
}

Teraz otrzymujemy oczekiwany efekt zazolc-gesla-jazn-zazolc-gesla-jazn, zamienione znaki narodowe na ich odpowiedniki, spacje i inne znaki specjalne zamienione na myślniki (lub podkreślniki) oraz cały ciąg pisany mała czcionką bez wielkich liter. Taki ciąg można wykorzystać w adresie URL.

Bardzo przydatna rzecz do tworzenia przyjaznych adresów ze słowami kluczowymi. Oczywiście dla kodowania iso-8859-2, które niestety nadal jest w użyciu.

Funkcja specialchar_latin2() w ostatecznej wersji:

$map_latin2=array(
	"\xa1","\xa3","\xa5","\xa6","\xa7","\xa9","\xaa","\xab","\xac","\xae","\xaf",
	"\xb1","\xb3","\xb5","\xb6","\xb9","\xba","\xbb","\xbc","\xbe","\xbf","\xc0",
	"\xc1","\xc2","\xc3","\xc4","\xc5","\xc6","\xc7","\xc8","\xc9","\xca","\xcb",
	"\xcc","\xcd","\xce","\xcf","\xd0","\xd1","\xd2","\xd3","\xd4","\xd5","\xd6",
	"\xd7","\xd8","\xd9","\xda","\xdb","\xdc","\xdd","\xde","\xdf","\xe0","\xe1",
	"\xe2","\xe3","\xe4","\xe5","\xe6","\xe7","\xe8","\xe9","\xea","\xeb","\xec",
	"\xed","\xee","\xef","\xf0","\xf1","\xf2","\xf3","\xf4","\xf5","\xf6","\xf8",
	"\xf9","\xfa","\xfb","\xfc","\xfd","\xfe",
);
//Tablice znakow diakrytycznych 
//dla kodowania iso-8859-2 (latin2)
//by tosiek - https://tosiek.pl/
$map2_latin2=array(
	"\x41","\x4c","\x4c","\x53","\x53","\x53","\x53","\x54","\x5a","\x5a","\x5a",
	"\x61","\x6c","\x6c","\x73","\x73","\x73","\x74","\x7a","\x7a","\x7a","\x52",
	"\x41","\x41","\x41","\x41","\x4c","\x43","\x43","\x43","\x45","\x45","\x45",
	"\x45","\x49","\x49","\x44","\x44","\x4e","\x4e","\x4f","\x4f","\x4f","\x4f",
	"\x78","\x52","\x55","\x55","\x55","\x55","\x59","\x54","\x73\x73","\x72","\x61",
	"\x61","\x61","\x61","\x6c","\x63","\x63","\x63","\x65","\x65","\x65","\x65",
	"\x69","\x69","\x64","\x64","\x6e","\x6e","\x6f","\x6f","\x6f","\x6f","\x72",
	"\x75","\x75","\x75","\x75","\x79","\x74",
);
function specialchar_latin2($url) {
//specialchar_latin2 by tosiek https://tosiek.pl/
	global $map_latin2,$map2_latin2;
	$url = str_replace($map_latin2,$map2_latin2,$url);
	$url = preg_replace('#[\W]{1,}#','-',$url);
	$url = trim($url,'-');
	$url = strtolower($url);
	return $url;
}

Życzę miłego tworzenia przyjaznych adresów dla wyszukiwarek i użytkowników (wiesz w co klikasz widząc sam link).

usuwanie stopki phpbb by przemo

usuwanie stopki phpbb by przemo

Żaden ze znanych skryptów nie blokuje zmiany stopki ani jej usunięcia oprócz phpbb by przemo. Usunięcie stopki jest możliwe oraz jej modyfikacje.
Lecz tutaj po zmianie stopki wyświetla się komunikat i jakby tego mało wysyła email do przema… To nie jest instrukcja typu zrób to i tamto !

Jak jest wyświetlana stopka ?

Zaczynamy od tego iż stopka jest wyświetlana z pliku overall_footer.tpl za pomocą zmiennej stylu: {PAGE_LOAD_PLEASE_WAIT} (w uproszczonej stopce simple_footer.tpl usunięcie lub zmiana stopki nie powoduje wyświetlenia ostrzeżenia).

I jakakolwiek modyfikacja stopki lub usunięcie powoduje wyświetlenie ostrzeżenia.

Stopka forum została zmodyfikowana, forum nie będzie działać prawidłowo!
Ustaw prawidłowo stopkę w pliku overall_footer.tpl, musi być ona widoczna w przegladarce, nie może zawierać “sztuczek” maskujacych.

Wzór: Powered by <a href="http://www.phpbb.com" target="_blank" class="copyright">phpBB</a> modified by <a href="http://www.przemo.org/phpBB2/" class="copyright" target="_blank">Przemo</a> &copy; 2003 phpBB Group

Lecz ostrzeżenie wyświetla się tylko podczas wysyłania postu lub prywatnej wiadomości, a za to odpowiada plik posting.php lub includes/functions_post.php.

Niestety na darmo możemy szukać zmiennej stylu {PAGE_LOAD_PLEASE_WAIT} w pliku includes/page_tail.php (odpowiada ona za generowanie stopki), ale znajdziemy ją w pliku includes/page_header.php (odpowiada za generowanie headera – topu forum):

'PAGE_LOAD_PLEASE_WAIT' => append_sid('<a href="index.'.$phpEx.'?mode=tloading">' . $lang['Page_loading_wait'] . '</a>'),

Więc szukamy funkcji append_sid, znajduje się w pliku includes/sessions.php

function append_sid($url, $non_html_amp = false, $subdir_off = false)
{
	global $SID, $subdirectory;
 
	if ( !empty($SID) && !preg_match('#sid=#', $url) )
	{
		$url .= ( ( strpos($url, '?') !== false ) ?  ( ( $non_html_amp ) ? '&' : '&amp;' ) : '?' ) . $SID;
	}
 
	if ( isset($subdirectory) && !$subdir_off )
	{
		$url = $subdirectory . $url;
	}
 
	$sid1 = base64_decode('aGFzaF8x');
	$sid_s = base64_decode('aGFzaF8y');
 
	global $$sid1, $$sid_s;
 
	return (strpos($url, base64_decode('bW9kZT10bG9hZGluZw==')) !== false) ? base64_decode(base64_decode(str_replace('si', '', $$sid1))) : ((strpos($url, base64_decode('bW9kZT1lbG9hZGluZw==')) !== false) ? base64_decode(base64_decode($$sid_s)) : $url);
}

Na pierwszy rzut oka coś związanego z adresami i ID sesji… lecz base64_decode() i do tego podwójne budzi ciekawość więc sprawdźmy i zdekodujmy:

$sid1 = hash_1;
$sid_s = hash_2;

Co ciekawsze hash_1 i hash_2 to zmienne globalne (zmienne bo należy zwrócić uwagę na dwa $$ przed nazwą):

global $$sid1, $$sid_s;

Więc tak naprawdę mamy:

global $hash_1, $hash_2;

a te zmienne znajdują się w pliku includes/constans.php:

// Forum unique hash
$hash_1 = 'VUc5M1pYSmxaQ0JpZVNBOFlTQm9jbVZtUFNKb2RIUndPaTh2ZDNkM0xuQm9jR0ppTG1OdmJTSWdkR0Z5WjJWMFBTSmZZbXhoYm1zaUlHsiTnNZWE56UFNKamIzQjVjbWxuYUhRaVBuQm9jRUpDUEM5aFBpQnRiMlJwWm1sbFpDQmllU0E4WVNCb2NtVm1QU0pvZEhSd09pOHZkM2QzTG5CeWVtVnRieTV2Y21jdmNHaHdRa0l5THlJZ1kyeGhjM005SW1OdmNIbHlhV2RvZENJZ2RHRnlaMlYwUFNKZllteGhibXNpUGxCeWVtVnRiend2WVQ0Z0ptTnZjSGs3SURJd01ETWdjR2h3UWtJZ1IzSnZkWEE9';
$hash_2 = 'UENFdExTQlFiM2RsY21Wa0lHSjVJSEJvY0VKQ0lHMXZaR2xtYVdWa0lIWXhMamtnWW5rZ2NISjZaVzF2SUNnZ2FIUjBjRG92TDNkM2R5NXdjbnBsYlc4dWIzSm5MM0JvY0VKQ01pOGdLU0F0TFQ0PQ==';

Następnie funkcja zwraca nam wartość ale zależną od tego co znajdzie w $url (należy najpierw pamiętać o usunięciu si w $hash_1):

return (strpos($url, 'mode=tloading') !== false) ? 'Powered by <a href="http://www.phpbb.com" target="_blank" class="copyright">phpBB</a> modified by <a href="http://www.przemo.org/phpBB2/" class="copyright" target="_blank">Przemo</a> © 2003 phpBB Group' : ((strpos($url, 'mode=eloading') !== false) ? '<!-- Powered by phpBB modified v1.9 by przemo ( http://www.przemo.org/phpBB2/ ) -->' : $url);

Oczywiście nas interesuje to co zwróci dla mode=tloading, a zwróci stopkę z $hash_1.

To już wiemy jak jest wyświetlana stopka.

Jak jest sprawdzana poprawność stopki ?

W pliku lang_main.php znajdziemy ostrzeżenie dotyczące stopki:

$lang['footer'] = 'Stopka forum została zmodyfikowana, forum nie będzie działać prawidłowo!<br />Ustaw prawidłowo stopkę w pliku overall_footer.tpl, musi być ona widoczna w przegladarce, nie może zawierać "sztuczek" maskujacych.<br /><br />Wzór: <b>Powered by &lt;a href=&quot;http://www.phpbb.com&quot; target=&quot;_blank&quot; class=&quot;copyright&quot;&gt;phpBB&lt;/a&gt; modified by &lt;a href=&quot;http://www.przemo.org/phpBB2/&quot; class=&quot;copyright&quot; target=&quot;_blank&quot;&gt;Przemo&lt;/a&gt; &amp;copy; 2003 phpBB Group</b>';

Skoro wiemy jak jest wyświetlana stopka i że ostrzeżenie pojawia się podczas pisania więc poszukajmy w pliku includes/functions_post.php naszej znajomej zmiennej:

$$sid1

Zaprowadzi nas to do funkcji correct_file() lecz zacznijmy od początku:

//code to get rid of some quick-reply-mod problems
	$crf = base64_decode('Y29ycmVjdF9maWxl');

po zdekodowaniu wywołuje funkcję correct_file:

$crf = correct_file;

Lecz następnie jest losowana liczba z pewnego przedziału:

$cr_file = rand(4,8);

Wiec szukamy co korzysta ze zmiennej $cr_file:

if ( $cr_file == 5 ) @$crf(false);

Jeśli wylosuje się 5 to stopka nie zostanie sprawdzona.

Funkcja correct_file()

function correct_file($file = true)
{
	global $board_config, $phpEx, $lang;
 
	$server_name = preg_replace('#^\/?(.*?)\/?$#', '\1', trim($board_config['server_name']));
	$btf = base64_decode('bWFpbA==');
	$script_name = preg_replace('#^\/?(.*?)\/?$#', '\1', trim($board_config['script_path']));
	$script_name = ($script_name == '') ? $script_name. '/login.'.$phpEx : '/' . $script_name. '/login.'.$phpEx;
	$server_protocol = ($board_config['cookie_secure']) ? 'https://' : 'http://';
	$server_port = trim($board_config['server_port']);
 
	$sid1 = base64_decode('aGFzaF8x');
 
	global $$sid1;
	$$sid1 = str_replace('si', '', $$sid1);
	$cont = get_url($server_name, $script_name, trim($board_config['server_port']));
	$cont = $cont[1];
	$th_ch = base64_decode(base64_decode($$sid1));
	if ( @eregi('username', $cont) && @eregi('password', $cont) )
	{
		$lmk = false;
		if ( !($pos = @strpos($cont, $th_ch)) || !(@strpos($$sid1, 'NJZ2RHRnlaMlYwUFNKZllteGhibXNpUGxCeWVtVnRiend2WVQ0Z')) || !(@strpos($$sid1, 'xuYUhRaVBuQm9jRUpDUEM5aFBpQnRiMlJwWm1sbFpDQmllU0E4WVNCb2NtVm1QU0pvZEhSd09pOHZkM2QzTG5CeWVtVnRieTV2Y21jdmNHaHdRa0l5TH')) )
		{
			$lmk = true;
		}
		$first = @str_replace(' ', '', @substr($cont, $pos-20, 20));
		$second = @str_replace(' ', '', @substr($cont, $pos+@strlen($th_ch)-1, 20));
		if ( @strpos($first, base64_decode('IS0t')) || @strpos($first, base64_decode('PGZvbg==')) || @strpos($first, base64_decode('aGlkZQ==')) || @strpos($first, base64_decode('aGlkZGU=')) || @strpos($second, base64_decode('LS0=')) || @strpos($second, base64_decode('L2Zvbg==')) )
		{
			$lmk = true;
		}
		if ( $lmk )
		{
			$th_d = base64_decode(base64_decode('Wm05dmRHVnk='));
			if ( @strpos($th_d, base64_decode(base64_decode('SEE2THk5M2QzY3VjSEo2WlcxdkxtOXla'))) ) exit;
			if ( @function_exists($btf) && $board_config['data'] < (CR_TIME - 432000) ) { @$btf(base64_decode('c3RvcGthQHByemVtby5vcmc='), base64_decode('LVNUT1BLQS0=-'), $server_protocol . $server_name . $server_port . '/' . preg_replace('#^\/?(.*?)\/?$#', '\1', trim($board_config['script_path'])) . "\r\n" . $board_config['board_email']); update_config('data', CR_TIME); }die($lang[$th_d]);
		}
	}
	return true;
}

Wiec po kolei, zmienna $btf

$btf = mail;

(jakby nie patrzeć będzie wysyłany email)
Odniesienie do naszego wzorcu stopki:

$sid1 = hash_1;

Potem z naszego wzoru stopki usuwane są frazy si oraz nasz wzorzez jest dwa razy dekodowany i otrzymujemy:

$th_ch = 'Powered by <a href="http://www.phpbb.com" target="_blank" class="copyright">phpBB</a> modified by <a href="http://www.przemo.org/phpBB2/" class="copyright" target="_blank">Przemo</a> © 2003 phpBB Group';

I co ciekawe jest pobierana treść strony logowania i jeśli znajdą sie tam dwie frazy password oraz username to tylko wtedy sprawdzana jest poprawność stopki.

Następnie sprawdzane jest czy znajduje się tam cała stopka według wzorca oraz czy wzorzec jest zgodny z porównaniem, jeśli nie to wysyłany jest email do przema i zostaje wyświetlone ostrzeżenie.

Dodatkowo sprawdzane są sztuczki maskujące (komentowanie stopki, jak i znacznik oraz hidden w CSS) takim if-em, jeśli zostaną znalezione w pobliżu stopki także wyświetlane jest ostrzeżenie i wysłany zostaje email do przema:

if ( @strpos($first, '!--') || @strpos($first, '<fon') || @strpos($first, 'hide') || @strpos($first, 'hidde') || @strpos($second, '--') || @strpos($second, '/fon') )

Oczywiście wysyłanie maila wygląda tak:

$th_d = footer;
			if ( @function_exists(mail) && $board_config['data'] < (CR_TIME - 432000) ) { 
@mail('stopka@przemo.org', '-STOPKA-', $server_protocol . $server_name . $server_port . '/' . preg_replace('#^\/?(.*?)\/?$#', '\1', trim($board_config['script_path'])) . "\r\n" . $board_config['board_email']); 
update_config('data', CR_TIME); 
}
die($lang[$th_d]);

I po wysłaniu maila wyświetlane jest ostrzeżenie:

die('footer');

Wszystko jest wysyłane na email……………….

Jak wyłączyć sprawdzanie stopki ?

W pliku overall_footer.tpl zmieniamy:

{PAGE_LOAD_PLEASE_WAIT}

na:

<br><a href="http://www.phpbb.com" target="_blank" class="copyright">phpBB</a> &amp; <a href="http://www.przemo.org/phpBB2/" target="_blank" class="copyright">Przemo</a>

W pliku includes/functions_post.php znajdź:

$crf = base64_decode('Y29ycmVjdF9maWxl');

zamień na:

//$crf = base64_decode('Y29ycmVjdF9maWxl');

znajdź:

$cr_file = rand(4,8);

zamień na:

//$cr_file = rand(4,8);

znajdź:

if ( $cr_file == 5 ) @$crf(false);

zamień na:

//if ( $cr_file == 5 ) @$crf(false);

To wszystko, nigdzie więcej stopka nie jest sprawdzana lecz nie jestem w stanie tego zagwarantować iż jakieś maile nie są jeszcze wysyłane.

Jak usunąć stopkę phpbb by przemo – prostszy sposób

Aby usunąć stopkę wystarczy zaingerować w plik: includes/sessions.php, otwieramy go
Szukamy funkcji append_sid

function append_sid

Następnie trochę niżej linijek:

$sid1 = base64_decode('aGFzaF8x');
	$sid_s = base64_decode('aGFzaF8y');
 
	global $$sid1, $$sid_s;
 
	return (strpos($url, base64_decode('bW9kZT10bG9hZGluZw==')) !== false) ? base64_decode(base64_decode(str_replace('si', '', $$sid1))) : ((strpos($url, base64_decode('bW9kZT1lbG9hZGluZw==')) !== false) ? base64_decode(base64_decode($$sid_s)) : $url);

Zmieniamy je na:

return $url;

Bardzo proste, od teraz stopka nie będzie się wyświetlała ze zmiennej {PAGE_LOAD_PLEASE_WAIT}, dlatego należy pamiętać by usunąć sprawdzanie stopki.

Zapomniałem napisać ale dzięki temu (wyłączeniu sprawdzania stopki) zwiększa się szybkość wysyłania postów!

usuwanie polskich znaków php

usuwanie polskich znaków diakrytycznych php

Często zachodzi potrzeba zastąpienia polskich znaków diakrytycznych takich jak:ą, ć, ę, ł, ń, ó, ś, ź, ż, Ą, Ć, Ę, Ł, Ń, Ó, Ś, Ź, Ż ich odpowiednikami bez ogonków (graficzne odpowiedniki): a, c, e, l, n, o, s, z, z, A, C, E, L, N, O, S, Z, Zposłuży nad do tego prosta funkcja remove_pl która jest niezależna od kodowania i udostępnia usuwanie polskich znaków z tablic jak i stringów. Usuwa także polskie znaki z kluczy tablicy jak i wartości. Może usuwać polskie znaki z trzech kodowań:
  • UTF-8 (utf8)
  • ISO-8859-2 (latin2)
  • Windows-1250 (cp1250 )
a oto ta funkcja:
function remove_pl($text,$from) {
//remove_pl by tosiek - https://tosiek.pl/
	if($from == 'utf8') {
		$from = array(
			"\xc4\x85", "\xc4\x87", "\xc4\x99",
			"\xc5\x82", "\xc5\x84", "\xc3\xb3",
			"\xc5\x9b", "\xc5\xba", "\xc5\xbc",
			"\xc4\x84", "\xc4\x86", "\xc4\x98",
			"\xc5\x81", "\xc5\x83", "\xc3\x93",
			"\xc5\x9a", "\xc5\xb9", "\xc5\xbb",
		);
	}elseif($from == 'latin2') {
		$from = array(
			"\xb1", "\xe6", "\xea",
			"\xb3", "\xf1", "\xf3",
			"\xb6", "\xbc", "\xbf",
			"\xa1", "\xc6", "\xca",
			"\xa3", "\xd1", "\xd3",
			"\xa6", "\xac", "\xaf", 
		);
	}elseif($from == 'cp1250') {
		$from = array(
			"\xb9", "\xe6", "\xea",
			"\xb3", "\xf1", "\xf3",
			"\x9c", "\x9f", "\xbf",
			"\xa5", "\xc6", "\xca",
			"\xa3", "\xd1", "\xd3",
			"\x8c", "\x8f", "\xaf",
		);
	}
	$clear = array(
		"\x61", "\x63", "\x65",
		"\x6c", "\x6e", "\x6f",
		"\x73", "\x7a", "\x7a",
		"\x41", "\x43", "\x45",
		"\x4c", "\x4e", "\x4f",
		"\x53", "\x5a", "\x5a",
	);
	if(is_array($text)) {
		foreach($text as $key => $value) {
			$array[str_replace($from, $clear, $key)]= str_replace($from, $clear, $value);
		}
		return $array;
	}else {
		return str_replace($from, $clear, $text);
	}
}
Wywołanie funkcji dla UTF-8
$string = 'ą, ć, ę, ł, ń, ó, ś, ź, ż, Ą, Ć, Ę, Ł, Ń, Ó, Ś, Ź, Ż';
$no_pl = remove_pl($string, utf8);
echo $no_pl;
Wywołanie funkcji dla ISO-8859-2
$string = 'ą, ć, ę, ł, ń, ó, ś, ź, ż, Ą, Ć, Ę, Ł, Ń, Ó, Ś, Ź, Ż';
$no_pl = remove_pl($string, latin2);
echo .$no_pl;
Wywołanie funkcji dla Windows-1250
$string = 'ą, ć, ę, ł, ń, ó, ś, ź, ż, Ą, Ć, Ę, Ł, Ń, Ó, Ś, Ź, Ż';
$no_pl = remove_pl($string, cp1250);
echo $no_pl;
W każdym wypadku funkcja zwróci nam:a, c, e, l, n, o, s, z, z, A, C, E, L, N, O, S, Z, Z

Usuwanie polskich znaków online

Możesz tutaj wkleić dowolny kod z polskimi znakami i kliknij przycisk Usuń polskie znaki, wszystkie polskie znaki zostaną zmienione na język polskawy (wszelkie ogonki, kreseczki i tym podobne zostaną zamienione na znak bez ozdobników np. Ń na N)




?>