Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [php,regexp] wyrażenia regularne - zamiana
Scrooge
post
Post #1





Grupa: Zarejestrowani
Postów: 34
Pomógł: 0
Dołączył: 22.12.2006

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


Witam!

Potrzebuje wyrażenia regularnego, które przekształciło mi coś takiego:

  1. <table cellpadding="10">
  2. <tr>
  3. <td>jeden</td>
  4. <td>dwa</td>
  5. </tr>
  6. <tr>
  7. <td>trzy</td>
  8. <td>cztery</td>
  9. </tr>


w

  1. <tr>
  2. <td style="padding:10px">jeden</td>
  3. <td style="padding:10px">dwa</td>
  4. </tr>
  5. <tr>
  6. <td style="padding:10px">trzy</td>
  7. <td style="padding:10px">cztery</td>
  8. </tr>


Wiem, że pewnie to będzie preg_replace. Nawet napisałem już jakiś pattern postaci:
"<table(?:.*?)cellpadding="(.*?)"(?:.*?)>(?:\n(?:\s)*(?:.*))*</table>"
i on wyłapuje mi tą potrzebną część czyli ile wynosi padding ale nie wiem jak teraz z tego stworzyć potrzebny kod wynikowy.

Problem bierze się z faktu, że FCKeditor przy tworzeniu tabelek produkuje "cellpading" w tabelach. A to się gryzie z plikiem css gdzie jest zapis *{padding:0;margin:0} a więc zeruje wszystkie paddingi i tylko css-em można je dodać. "cellpadding" html-owy jest ignorowany. Jeśli ktoś zna inny sposób na rozwiązanie tego problemu (żeby w tabelkach tworzonych w FCKedytorze działał cellpading) to był bym wdzięczny za podpowiedź. Najrozsądniej było by po prostu przerobić FCKEditora, żeby tworzył od razu taki kod ale zagłębić się w jego kod to nie lada gratka a nie mam czasu na to teraz (IMG:http://forum.php.pl/style_emoticons/default/smile.gif)
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi
Kicok
post
Post #2





Grupa: Zarejestrowani
Postów: 1 033
Pomógł: 125
Dołączył: 17.09.2005
Skąd: Żywiec

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


  1. <?php
  2.  
  3.  
  4. $text = "dsfs sdfvsd dsfvgds
  5. sdf
  6. <table cellpadding=\"10\">
  7. <tr>
  8. <td>jeden</td>
  9. <td>dwa</td>
  10. </tr>
  11. <tr>
  12. <td>trzy</td>
  13. <td>cztery</td>
  14. </tr>
  15. </table>
  16.  
  17. <b>fd fdg </b> fdg f
  18. <table cellpadding=\"5\">
  19. <tr>
  20. <td>jeden</td>
  21. <td>dwa</td>
  22. </tr>
  23. <tr>
  24. <td>trzy</td>
  25. <td>cztery</td>
  26. </tr>
  27. </table>
  28.  
  29. <table>
  30. <tr>
  31. <td>jeden</td>
  32. <td>dwa</td>
  33. </tr>
  34. <tr>
  35. <td>trzy</td>
  36. <td>cztery</td>
  37. </tr>
  38. </table>
  39.  
  40. dgdfg ";
  41.  
  42.  
  43.  
  44.  
  45. function addStyleAttribute( $matches )
  46. {
  47. $tableCode = "<table{$matches[1]}{$matches[3]}>";
  48. $tableCode .= preg_replace( "/<td([^>]*)>/i", "<td1 style=\"padding:{$matches[2]}px\">", $matches[4] );
  49. $tableCode .= "</table>";
  50.  
  51.  
  52. return $tableCode;
  53. }
  54.  
  55.  
  56. $text = preg_replace_callback( '/<table([^>]+?)cellpadding="([0-9]+)"([^>]*)>(.*?)</table>/si', 'addStyleAttribute', $text );
  57. echo '<pre>' . htmlspecialchars( $text ) . '</pre>';
  58.  
  59. ?>



Powinno działać.
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: 26.12.2025 - 02:37