Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [PHP] BBCode parser dla PHP7
ToTamir
post
Post #1





Grupa: Zarejestrowani
Postów: 15
Pomógł: 0
Dołączył: 10.04.2012

Ostrzeżenie: (0%)
-----


Proszę o ocenę kodu pod względem optymalności oraz bezpieczeństwa. Parser miał być prosty i bezpieczny. Udało się cały kod zmieścić w 66 linijkach także dużo sprawdzania nie będzie ;-)
Tutaj znajduje się cały kod wraz z opisem:
https://github.com/ToTamir/BBCode-Parser
Powód edycji: [nospor]: nie pozycjonuj sie tu
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi
ToTamir
post
Post #2





Grupa: Zarejestrowani
Postów: 15
Pomógł: 0
Dołączył: 10.04.2012

Ostrzeżenie: (0%)
-----


Poprawiłem tablice oraz uwzględniłem same \n .Wygląda to obecnie tak:

  1. function ParseBBCode(string $string): string
  2. {
  3. $string = htmlspecialchars($string, ENT_QUOTES, 'UTF-8', true);
  4.  
  5. $patterns =
  6. [
  7. '/\[ol\][\s\S]+?\[\/ol\]/',
  8. '/\[ul\][\s\S]+?\[\/ul\]/',
  9. '/\[table\][\s\S]+?\[\/table\]/'
  10. ];
  11.  
  12. $string = preg_replace_callback($patterns, function($matches){return preg_replace('/\s+/', ' ',$matches[0]);}, $string);
  13.  
  14. $patterns =
  15. [
  16. '/\[b\](.*?)\[\/b\]/',
  17. '/\[i\](.*?)\[\/i\]/',
  18. '/\[u\](.*?)\[\/u\]/',
  19. '/\[s\](.*?)\[\/s\]/',
  20. '/\[j\](.*?)\[\/j\]/',
  21. '/\[size=([\d.]+)\](.*?)\[\/size\]/',
  22. '/\[color=(([a-z]+)|(#[0-f]{6}?)|(rgb\(\d{1,3}?\,\d{1,3}?\,\d{1,3}?\)))\](.*?)\[\/color\]/',
  23. '/\[center\](.*?)\[\/center\]/',
  24. '/\[left\](.*?)\[\/left\]/',
  25. '/\[right\](.*?)\[\/right\]/',
  26. '/\[quote=(.*?)\](.*?)\[\/quote\]/',
  27. '/\[quote\](.*?)\[\/quote\]/',
  28. '/\[url=(.*?)\](.*?)\[\/url\]/',
  29. '/\[img=(.*?) alt=(.*?)\]/',
  30. '/\[youtube=(.*?)\]/',
  31. '/\[li\](.*?)\[\/li\]/',
  32. '/\[td\](.*?)\[\/td\]/',
  33. '/\[ol\](.*?)\[\/ol\]/',
  34. '/\[ul\](.*?)\[\/ul\]/',
  35. '/\[table\](.*?)\[\/table\]/',
  36. '/\[tr\](.*?)\[\/tr\]/',
  37. '/\[th\](.*?)\[\/th\]/',
  38. '/\[code\]/',
  39. '/\[\/code\]/',
  40. '/\r\n/',
  41. '/\n/'
  42. ];
  43.  
  44. $replacements =
  45. [
  46. '<strong>$1</strong>',
  47. '<em>$1</em>',
  48. '<span style="text-decoration:underline;">$1</span>',
  49. '<del>$1</del>',
  50. '<span style="text-align:justify;text-justify:inter-word;">$1</span>',
  51. '<span style="font-size:$1rem;">$2</span>',
  52. '<span style="color:$1;">$5</span>',
  53. '<div style="text-align:center;">$1</div>',
  54. '<div style="text-align:left;">$1</div>',
  55. '<div style="text-align:right;">$1</div>',
  56. '<blockquote><strong>$1:</strong><br>$2</blockquote>',
  57. '<blockquote>$1</blockquote>',
  58. '<a href="$1">$2</a>',
  59. '<img src="$1" alt="$2">',
  60. '<iframe src="https://www.youtube-nocookie.com/embed/$1" allow="autoplay; encrypted-media" allowfullscreen></iframe>',
  61. '<li>$1</li>',
  62. '<td>$1</td>',
  63. '<ol>$1</ol>',
  64. '<ul>$1</ul>',
  65. '<table>$1</table>',
  66. '<tr>$1</tr>',
  67. '<th>$1</th>',
  68. '<code>',
  69. '</code>',
  70. '<br>',
  71. '<br>'
  72. ];
  73.  
  74. return preg_replace($patterns, $replacements, $string);
  75. }


Co do funkcji preg_replace() oraz preg_replace_callback() nie do końca się zgodzę. To prawda, że funkcje te mogą zwrócić inny typ danych, ale dzieje się tak tylko w przypadku błędu. Błąd może wystąpić tylko i wyłącznie w dwóch przypadkach:
1. zmienna przekazywana do tych funkcji jest innego typu niż array lub string,
2. pattern lub replacement są przekazane do funkcji z błędem.
Możliwość pojawienia się błędu numer 2 została wyeliminowana przez sprawdzenie wyniku wykonania kodu, natomiast możliwość pojawienia się błędu numer 1 została wyeliminowana przez wymuszenie w funkcji typu string dla parametru $string.
A więc jedyna możliwość pojawienia się FATAL ERROR pomijając przekroczenie pamięci czy czasu wykonywania to przekazanie do funkcji zmiennej innego typu niż string. Jeżeli "programista" nie sprawdza typów danych przed przekazywaniem ich do funkcji to raczej nie będzie to jedyny FATAL ERROR w jego programie.

Chyba że się mylę? I dodatkowo drugi raz proszę o podpowiedź, na co zwrócić uwagę przy filtrowaniu url dla obrazów.
Go to the top of the page
+Quote Post

Posty w temacie


Reply to this topicStart new topic
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 13.10.2025 - 11:27