Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> Funkcja poprawiające znaczniki <img> (Wyrażenia regularne)
ladovnik
post
Post #1





Grupa: Zarejestrowani
Postów: 60
Pomógł: 1
Dołączył: 25.11.2008
Skąd: Polska

Ostrzeżenie: (10%)
X----


Witam. Zrobiłem funkcję, która poprawia znaczniki <img> w kodzie strony, mianowicie dodaje do nich atrybut alt (Takie są standardy W3C). Problem w tym, że do tych które mają już alt też dodaje... nie wiem jak zrobić, aby znaczniki z alt były pomijane... tzn. wiem, trzeba użyć negacji, ale z negacją zawsze miałem problemy... Pomoże mi ktoś?

Kod funkcji:
  1. <?php
  2. function FixImgTags($str)
  3. {
  4.    $str=preg_replace("#<img(.*?)>#si","<img$1 alt=\"Image\">",$str);
  5.    
  6.    return $str;
  7. }
  8. ?>


Pozdrawiam,
ladovnik

Ten post edytował ladovnik 2.02.2009, 20:08:07
Go to the top of the page
+Quote Post
Wave
post
Post #2





Grupa: Zarejestrowani
Postów: 332
Pomógł: 6
Dołączył: 13.01.2005

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


Ja bym wywalal wszystkie alty pregiem i wrzucal na nowo, bo regexa do tego nie wiem czy ulozysz (nie wiem czy przy negacji wtecznej możesz stosować nieokreślone zbiory).
Go to the top of the page
+Quote Post
Crozin
post
Post #3





Grupa: Zarejestrowani
Postów: 6 476
Pomógł: 1306
Dołączył: 6.08.2006
Skąd: Kraków

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


Możesz wskazać mi w dokumentacji W3C fragment, który by informował o tym, że należy zrobić coś takiego jak Ty? To co robisz nie ma najmniejszego związku z W3C.

Co do problemu samego w sobie: preg_replace_callback" title="Zobacz w manualu PHP" target="_manual i przed zmianą sprawdzasz czy aby przypadkiem nie ma już alta.
Go to the top of the page
+Quote Post
Wave
post
Post #4





Grupa: Zarejestrowani
Postów: 332
Pomógł: 6
Dołączył: 13.01.2005

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


http://www.w3.org/TR/WCAG10-HTML-TECHS/#im...text-equivalent
Go to the top of the page
+Quote Post
zegarek84
post
Post #5





Grupa: Zarejestrowani
Postów: 1 332
Pomógł: 294
Dołączył: 12.10.2008
Skąd: Olkusz

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


Kod
$dane='<img src="style_emoticons/%3C#EMO_DIR#%3E/smile.gif" style="vertical-align: middle;" alt="smile.gif" border="0"/><img src="style_emoticons/%3C#EMO_DIR#%3E/smile.gif" style="vertical-align: middle;" border="0" />';
$dane=preg_replace(array('/ alt\=".*?"/si','/<img([^>]*?) ?\/?>/si'),array('','<img alt="Image"\1 />'),$dane);
echo $dane;

daje:
Kod
<img alt="Image" src="style_emoticons/%3C#EMO_DIR#%3E/smile.gif" style="vertical-align: middle;" border="0" /><img alt="Image" src="style_emoticons/%3C#EMO_DIR#%3E/smile.gif" style="vertical-align: middle;" border="0" />


--------------------
Jeśli twoja ręka rusza do przodu powstrzymaj swój gniew; gdy wyprzedza cię twój gniew - wycofaj rękę.

Go to the top of the page
+Quote Post
Smoker
post
Post #6





Grupa: Zarejestrowani
Postów: 101
Pomógł: 5
Dołączył: 15.10.2008
Skąd: Wrocław

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


w html'u nie jest błędem użycie img bez alt'a ! Do najnowszej części html'a czyli teraz chyba 4.01 bynajmniej wiem ze nie jest smile.gif Czyli spokojnie mozesz nie miec alt'a. Chyba ze strona opiera się na xhtml'u wtedy niezaleznie od wersji xhtml'a z ktorej kozystasz brak alt'a jest błędem. czyli tak w skrócie:

HTML - nie musisz mieć alt'a
xHTML - musisz mieć alt'a

A co do podmiany to mozesz sprobowac cos z if'em typu
Kod
if(nie ma alt'a){
wstaw go;
}
else{
nic nie rób
}


Ale to tylko taka mała propozycja toku mojego toku myślenia. Sam dopiero zaczynam z php wiec jeszcze Ci tego nie napisze w gotowym skrypcie ale mam nadzieje ze to pomoze smile.gif


--------------------
http://streetonline.pl/?gback=1 - Kliknij i daj się podwieźć
Go to the top of the page
+Quote Post
Foxx
post
Post #7





Grupa: Zarejestrowani
Postów: 896
Pomógł: 76
Dołączył: 15.11.2003
Skąd: Sosnowiec/Kraków

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


Upraszczając nieco:
  1. <?php
  2. $str = '<img src="costam">';
  3.  
  4. if(preg_match('/alt/', $str) == 0){
  5.   echo preg_replace("#<img(.*?)>#si","<img$1 alt=\"Image\">",$str);
  6. } else {
  7.   echo $str;
  8. }
  9. ?>


Aby obsłużyć także przypadek pustego tagu alt (alt="") można zrobić tak:

  1. <?php
  2. $str = '<img src="costam" alt="">';
  3.  
  4. if(preg_match('/alt/', $str) == 0){
  5.    echo preg_replace("#<img(.*?)>#si","<img$1 alt=\"Image\">",$str);
  6. } elseif(preg_match('/alt=""/', $str) == 1){
  7.    echo preg_replace('/alt=""/', 'alt="Image2"', $str);
  8. } else {
  9.    echo $str;
  10. }
  11. ?>
Go to the top of the page
+Quote Post
ladovnik
post
Post #8





Grupa: Zarejestrowani
Postów: 60
Pomógł: 1
Dołączył: 25.11.2008
Skąd: Polska

Ostrzeżenie: (10%)
X----


Ohoho, ile postów smile.gif A więc po kolei:
Wave - Jeśli chodzi o Twój pierwszy sposób z wywaleniem wszystkich altów i dodaniem ich na nowo też tak myślałem, ale jeżeli wcześniej były nadane konkretne alty np. alt="Kliknij aby coś tam" to raczej nie wskazane jest je usuwać.
Crozin - Wave już ci odpisał. Ja używam xHTML 4.01 smile.gif
Foxx przeanalizuję Twój przykład i niedługo Wam odpiszę, czy jest to rozwiązanie problemu (obecnie niestety muszę wyłączyć komputer...).

EDYCJA:
Niestety, Twoje rozwiązanie Foxx było by dobre, ale tylko dla jednego tagu IMG, ponieważ jeśli zmienna $str będzie zawierać:
  1. <?php
  2. $str="<html>
  3. <head>
  4. <title>Test</title>
  5. </head>
  6. <body>
  7. <p>Aby to zrobić, należy wcisnąć klawisz alt</p>
  8. <img src=\"obraz.png\">
  9. <img src=\"obraz.png\" width=\"8\" height=9>
  10. <img src=\"obraz.png\" width=\"666\" height=\"986\" border=0>
  11. <img src=\"obraz.png\" alt=\"tekst\">
  12. <img src=\"obraz.png\" alt=\"tekst\" border=0>
  13. </body>
  14. </html>";
  15. ?>

Wtedy jeśli gdziekolwiek znajdzie się słowo alt nawet nie w tagu img to on nie zamieni nic, w całym źródle.

Aby Twoje rozwiązanie było dobre dla takiej zmiennej należało by ją podzielić w tablicy tak, aby każdy tag img był w osobnym rekordzie a to co nie jest tagiem img też w osobnych rekordach...

EDYCJA 2:
Problem rozwiązałem przy pomocy explode, preg_match i preg_replace.

Pozdrawiam,
ladovnik

Ten post edytował ladovnik 3.02.2009, 12:24:00
Go to the top of the page
+Quote Post
Crozin
post
Post #9





Grupa: Zarejestrowani
Postów: 6 476
Pomógł: 1306
Dołączył: 6.08.2006
Skąd: Kraków

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


Cytat
Crozin - Wave już ci odpisał. Ja używam xHTML 4.01
Widzę, że nikt nie zrozumiał smile.gif
<img ... alt="image" /> nie manic wspólnego z tym co mówi W3C. W alt ma się znaleźć tekst alternatywny, opisujący obrazek jego treści lub ew. działania. Wstawienie tam "image" jest kompletnie pozbawione sensu i IMHO pewnie słży jedynie This page is VALID ... document chociaż tak naprawdę nie będzie to "valid".
W dodatku taki alt, wprowadza więcej złego niż dobrego.

Co do tematu - jak napisałem pobierasz wyr.reg. wszystkie <img> i w callbacku sprawdzasz czy alt już jest.
Go to the top of the page
+Quote Post

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

 



RSS Aktualny czas: 20.08.2025 - 18:52