Dołącz do zespołu ekspertów! Backend lub Frontend Developer?

Sprawdź najnowsze oferty pracy naszego partnera - 8lines.io!

Spoiler MyCode a polskie znaki

Błąd   Założony przez  ficus.

wersja skryptu MyBB: 1.8.x
adres forumhttp://havenandhearth.eu/
na czym polega problem (screen, opis, komunikaty, nazwa i wersja wtyczki):

Posiadam zainstalowany plugin MyCode Spoiler autorstwa Sephiroth'a. 
Mam jednak problem z przepuszczaniem polskich znaków -> http://i.imgur.com/lKk6s8F.png
Wyrażenie regularne określające pattern dopuszczalnych znaków nie posiada dodatku PL, jednak sam nie bardzo mogę osiągnąć pożądany efekt.

Oryginał:
$pattern = array("#\[spoiler=(?:"|\"|')?([a-zA-Z0-9!:\#\.\? \',\-\(\)]*?)[\"']?(?:"|\"|')?\](.*?)\[\/spoiler\](\r\n?|\n?)#si""#\[spoiler\](.*?)\[\/spoiler\](\r\n?|\n?)#si",); 


Próbowałem kilka wariantów w tym stylu:
$pattern = array("#\[spoiler=(?:"|\"|')?([a-zA-Z0-9ąćęłńóśźżĄĆĘŁŃÓŚŹŻ!:\#\.\? \',\-\(\)]*?)[\"']?(?:"|\"|')?\](.*?)\[\/spoiler\](\r\n?|\n?)#si""#\[spoiler\](.*?)\[\/spoiler\](\r\n?|\n?)#si",); 

Niestety, jako że moja wiedza na temat php czy ogólnie programowania jako takiego praktycznie nie istnieje, brak efektów przywiódł mnie tutaj :)
"Try not. Do... or do not. There is no try."
Poświęć 5 minut. Nie bądź ignorantem!  -  Jak zbadać element?
Zakres [a-zA-Z] obejmuje polskie znaki. Wystarczy zmienić format kodowania pliku wtyczki na utf-8 (bez boom)
Zmiana formatu była pierwszym działaniem na tym pliku :( Niestety, bez efektu.


//edit

Mój błąd. Przykłady sprawdzające (patrz screen) nie działają ze względu na znaki specjalne. Zmiana konwersji faktycznie naprawiła problem polskich znaków na samym początku. W takim razie zwracam pytanie -> gdzie leży błąd we wzorze, że nie wyświetla pokazanego ciągu znaków w tytule spoilera?
"Try not. Do... or do not. There is no try."
Poświęć 5 minut. Nie bądź ignorantem!  -  Jak zbadać element?
Wstaw zamiast tego:
[a-zA-Z0-9!:\#\.\? \',\-\(\)] 
to:
[a-zA-Z0-9!:\/\#\.\? \',\-\(\)] 
http://i.imgur.com/BBuoZfF.png

Czwarty spoiler po aktualizacji przestał działać, natomiast drugi ruszył :)
"Try not. Do... or do not. There is no try."
Poświęć 5 minut. Nie bądź ignorantem!  -  Jak zbadać element?
A spróbuj tak:
$pattern = array("#\[spoiler=?(:"|\"|\')?([a-zA-Z0-9 \!\?\#\*\(\)\-\.,:\'\/]*)?(:"|\"|\')?\](.*?)\[\/spoiler\](\r\n?|\n?)#si""#\[spoiler\](.*?)\[\/spoiler\](\r\n?|\n?)#si"); 

I wywołanie tak:
[spoiler="Zażółć gęślą jaźń (?!) #*-.,:/"][/spoiler]
[spoiler='Zażółć gęślą jaźń (?!) #*-.,:/'][/spoiler]
http://i.imgur.com/E4Qclt2.png

Z czego drugiego nie da się rozwinąć.


//Wywołanie nic nie zmieniło.

///Dodatkowo po powrocie do wersji oryginalnej z odpowiednim kodowaniem nie działa już opcja polskich znaków w tytule (przykład z słowem "makarena" na screenach).
"Try not. Do... or do not. There is no try."
Poświęć 5 minut. Nie bądź ignorantem!  -  Jak zbadać element?
$pattern = array("#\[spoiler=(?:"|\"|')?([a-zA-Z0-9 !\-\?\#\.:,\'\(\)\/]*?)[\"']?(?:"|\"|')?\](.*?)\[\/spoiler\](\r\n?|\n?)#si""#\[spoiler\](.*?)\[\/spoiler\](\r\n?|\n?)#si",); 
$pattern = array("#\[spoiler=(?:"|\"|')?([a-zA-Z0-9ąćęłńóśźżĄĆĘŁŃÓŚŹŻ !\-\?\#\.:,\'\(\)\/]*?)[\"']?(?:"|\"|')?\](.*?)\[\/spoiler\](\r\n?|\n?)#si""#\[spoiler\](.*?)\[\/spoiler\](\r\n?|\n?)#si",); 

Dodałem polskie znaki do twojej ostatniej poprawki i jest prawie idealnie.
http://i.imgur.com/En8T2xe.png
"Try not. Do... or do not. There is no try."
Poświęć 5 minut. Nie bądź ignorantem!  -  Jak zbadać element?
Wypłodziłem takie coś, ale nie wiem czy to zadziała bez tablicy:
$pattern "#\[spoiler(=\"|\'([\p{L}\p{Blank}\d\-\!\?\#\*\(\)\.,:\'\/]*)?\"|\')?\](.*?)\[\/spoiler\](\r\n?|\n?)#i"
Niestety bez tablicy ani rusz :) Moi userzy szczęśliwie nie są tak ambitni by wpaść na taki tytuł spoilera, więc myślę, że póki co nie ma się czym przejmować :) Dzięki za zaangażowanie!
"Try not. Do... or do not. There is no try."
Poświęć 5 minut. Nie bądź ignorantem!  -  Jak zbadać element?



Użytkownicy przeglądający ten wątek:

1 gości