Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: str_replace i białe znaki oraz łamane linie
Forum PHP.pl > Forum > PHP
Michael2318
Jak za pomocą str_replace() zamienić np. taki tekst:

Kod
    <div id="cos1">
    <div id="cos2">
    </div>
    </div>


na:

Kod
    <div id="cos3">
    <div id="cos4">
    </div>
    </div>


Chodzi o to, że przed każdą tą linią występują białe znaki, a dodatkowo każdal linia jest łamana.
Pawel_W
nie widzę problemu:
  1. str_replace(' <div id="cos1">
  2. <div id="cos2">
  3. </div>
  4. </div>', ' <div id="cos3">
  5. <div id="cos4">
  6. </div>
  7. </div>', $string);
kristaps
Jak wyżej, ewentualnie jeżeli jest różna ilość znaków, to użyj wyrażenia regularnego.
Michael2318
No właśnie, że w ten sposób to nie chce działać :/

Może ja dam oryginał. Chcę zamienić to:

Kod
      <td align="left" class="nav"><a href="{U_INDEX}" class="nav">{L_INDEX}</a><span class="nav">
        -> <a href="{U_VIEW_FORUM}" class="nav">{FORUM_NAME}</a></span></td>


na:

Kod
      <td align="left"><span class="nav"><a href="{U_INDEX}" class="nav">{L_INDEX}</a>{NAV_CAT_DESC}</span></td>


Kod php odpowiedzialny za zamianę:

  1. $find[1] = ' <td align="left" class="nav"><a href="{U_INDEX}" class="nav">{L_INDEX}</a><span class="nav">
  2. -> <a href="{U_VIEW_FORUM}" class="nav">{FORUM_NAME}</a></span></td>';
  3. $replacement[1] = ' <td align="left"><span class="nav"><a href="{U_INDEX}" class="nav">{L_INDEX}</a>{NAV_CAT_DESC}</span></td>';
  4. $fp = fopen($path.'plik.tpl', "r");
  5. $old_data = fread($fp, filesize($path.'plik.tpl'));
  6. fclose($fp);
  7.  
  8. $old_data = str_replace($find[1], $replacement[1], $old_data, $count);
  9.  
  10. $fp = fopen($path.'plik.tpl', "w");
  11. fputs($fp, $old_data);
  12. fclose($fp);
Pawel_W
masz taba w drugiej linijce kodu który chcesz zamienić, o ile się nie mylę
Michael2318
No tak, ale w czym to przeszkadza?
Pawel_W
jest chyba różnica pomiędzy
  1. $find[1] = ' <td align="left" class="nav"><a href="{U_INDEX}" class="nav">{L_INDEX}</a><span class="nav">
  2. -> <a href="{U_VIEW_FORUM}" class="nav">{FORUM_NAME}</a></span></td>';

a
  1. $find[1] = ' <td align="left" class="nav"><a href="{U_INDEX}" class="nav">{L_INDEX}</a><span class="nav">
  2. -> <a href="{U_VIEW_FORUM}" class="nav">{FORUM_NAME}</a></span></td>';
Michael2318
Nadal to samo, nie potrafi znaleźć tego fragmentu w pliku, mimo że on istnieje.
cudny
Po pierwsze nie używa się wyrażeń do zamiany HTML, od tego mamy DOM
Po drugie, str_replace() rozpoznaje białe znaki pisane jako: '\t\r\n '

Kombinuj gdzie jaki znak powinien się znajdować i zmień
Pawel_W
Cytat(cudny @ 26.01.2013, 01:40:32 ) *
Po drugie, str_replace() rozpoznaje białe znaki pisane jako: '\t\r\n '

g... prawda, string to string, nową linię możesz zapisać jako zwykły enter, albo jako \r\n, różnicy nie ma wink.gif
Kofel
Kod
Po pierwsze nie używa się wyrażeń do zamiany HTML, od tego mamy DOM

facepalmxd.gif
cudny
Nie mam czasu dokształcać takich jak wy, ale widzę, że próbujecie być mądrzejsi, czego nie lubię.

W kodzie robienie znaku nowej linii enterem jest delikatnie mówiąc - nieestetyczne ! O zgrozo !
Do tego zapisz sobie enterem w systemie unixowym \r\n - musisz zmieniać w edytorze, a potem żeby znowu powrócić do samego \n znowu grzebanie
Cytat(Pawel_W @ 26.01.2013, 01:56:20 ) *
g... prawda, string to string, nową linię możesz zapisać jako zwykły enter, albo jako \r\n, różnicy nie ma wink.gif



Czytaj !
http://stackoverflow.com/questions/1732348...-contained-tags
Cytat(Kofel @ 26.01.2013, 16:16:13 ) *
Kod
Po pierwsze nie używa się wyrażeń do zamiany HTML, od tego mamy DOM

facepalmxd.gif
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.