Webboard

Pełna wersja: Spoiler MyCode a polskie znaki
Aktualnie przeglądasz uproszczoną wersję forum. Kliknij tutaj, by zobaczyć wersję z pełnym formatowaniem.
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ł:
Kod PHP:
$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:
Kod PHP:
$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 :)

LikeLoveHate

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?

LikeLoveHate

Wstaw zamiast tego:
Kod PHP:
[a-zA-Z0-9!:\#\.\? \',\-\(\)] 
to:
Kod PHP:
[a-zA-Z0-9!:\/\#\.\? \',\-\(\)] 
http://i.imgur.com/BBuoZfF.png

Czwarty spoiler po aktualizacji przestał działać, natomiast drugi ruszył :)

LikeLoveHate

A spróbuj tak:
Kod PHP:
$pattern = array("#\[spoiler=?(:"|\"|\')?([a-zA-Z0-9 \!\?\#\*\(\)\-\.,:\'\/]*)?(:"|\"|\')?\](.*?)\[\/spoiler\](\r\n?|\n?)#si""#\[spoiler\](.*?)\[\/spoiler\](\r\n?|\n?)#si"); 

I wywołanie tak:
Kod:
[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).

LikeLoveHate

Kod PHP:
$pattern = array("#\[spoiler=(?:"|\"|')?([a-zA-Z0-9 !\-\?\#\.:,\'\(\)\/]*?)[\"']?(?:"|\"|')?\](.*?)\[\/spoiler\](\r\n?|\n?)#si""#\[spoiler\](.*?)\[\/spoiler\](\r\n?|\n?)#si",); 
Kod PHP:
$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

LikeLoveHate

Wypłodziłem takie coś, ale nie wiem czy to zadziała bez tablicy:
Kod PHP:
$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!