Clicky

Skocz do zawartości


Zdjęcie
- - - - -

Jak usunąć pl znaki ze stringu?

11 odpowiedzi w tym temacie
php mysql xml

  • Zaloguj się, aby dodać odpowiedź

#1 rel

rel

    Początkujący

  • Użytkownik
  • Pip
  • 16 postów

Napisano 19 luty 2014 - 08:04

Witam

Jestem tutaj nowy, mam nadzieję, że nikgo nie zrażę do siebie - dopiero raczkuję w php i temu podobnych :-)

 

Sprawa wyglada następująco:

 

1. Mam skrypt ogłoszeń, postawiony na kohanie.

 

2. W bazie mam tabelę announcements, w której to zawarte sa wszystkie ogłoszenia z serwisu. Mam tutaj m.in kolumny dotyczące: annoucement_id, _title, _content, etc

 

3. annoucement_title w bazie posiada niestety polskie znaki, co bardzo utrudnia mi sprawę. Dlaczego? To poniżej.

 

4. Dane z tabeli chcę wrzucić do .xmla, plik ten musi mieć konkretną budowę tagową, chodzi tutaj o wyszukiwarkę trovit...

 

5. Jednym w wierszy jest <url></url>, gdzie nie mże być spacji, dużych i małych liter, pl znaków, ", czy ."

 

6. problem pojawia się, gdy chce zaimportować z bazy annoucement_title i użyć go jako ostatniej części urla do każdego z ogłoszeń. Są tutaj polskie znaki, których za cholerę nie mogę usunąć, nic, co jest mi znane i nie tylko mi nie działa.

 

Zasięgnąłem pomocy phpiona, "prywatnie", ale i jego sposoby nie pomogły. Wywnioskował, że mam konflikt na styku kodowanie pliku i kodowanie bazy. Ale moja wiedza niestety nie pomaga mi w rozwiazaniu tego problemu, wieć zapytam na forum, nie chcę już mu zawracać głowy, po ma chłopina w ciul roboty.

 

Kodowanie pliku moj_rss.php ustawiłem na utf-8 bez boomu, z tego co widze w phpmyadminie, kodowanie announcements mam ustawione na utf-8_polish_ci.

 

Widzę również, że mam problem w momenice, gdy kodowanie xml ustawię na utf-8, to wywala mi bład treści:

Błąd przetwarzania XML: nieprawidłowo sformowany
Obszar: http://oglaszajtu.pl/trovit_oglaszajtu.xml
Numer wiersza: 1, kolumna 140:<?xml version="1.0" encoding="utf-8"?><trovit><ad><item><id><![CDATA[54]]></id><url><![CDATA[http://oglaszajtu.pl/ogloszenia/54/dom-wierusz

Zawartość pliku moj_rss.php, który generuje .xmla to:

<?php
function lacz_bd()
{  
  $db = new mysqli('localhost', 'user', 'pass', 'db'); 
  
  if (! $db)
      return false;
   $db->autocommit(TRUE);
   return $db;
}
$kanalRSS = '<?xml version="1.0" encoding="utf-8"?>';
$kanalRSS .= '<trovit>';
$kanalRSS .= '<ad>';

$db = lacz_bd();
$zapytanie = "SELECT * FROM announcements WHERE category_id in (140,141,142,143,144)";
$wynik = $db->query($zapytanie);
$ile_znalezionych = $wynik->num_rows;

for ($i=0; $i <$ile_znalezionych; $i++)
        {
        $wiersz = $wynik->fetch_assoc();
		
		$string_title = $wiersz['annoucement_title'];
		$string_url = $wiersz['annoucement_title'];
		$pattern = array(' ', ',', '.');
		$replacement = array('-', '', '');
		$string_url = strtolower(str_replace($pattern, $replacement, $string_url));
		
		
	    $wiersz['annoucement_content'] = strip_tags($wiersz['annoucement_content']);
		
		$string_type = $wiersz['annoucement_type'];
		$_type = array('1', '2', '3', '4');
		$_new_type = array('Buy', 'Replace', 'For Rent', 'For Sale');
		$wiersz['annoucement_type'] = str_replace($_type, $_new_type, $string_type);
				

        $kanalRSS .= '<item>';
	$kanalRSS .= '<id><![CDATA['.$wiersz['annoucement_id'].']]></id>';
    $kanalRSS .= '<url><![CDATA[http://oglaszajtu.pl/ogloszenia/'.$wiersz['annoucement_id'].'/'.$string_url.']]></url>';
	$kanalRSS .= '<title><![CDATA['.$string_title.']]></title>';
    $kanalRSS .= '<type><![CDATA['.$wiersz['annoucement_type'].']]></type>';
	$kanalRSS .= '<content><![CDATA['.$wiersz['annoucement_content'].']]></content>';
	$kanalRSS .= '<date><![CDATA['.$wiersz['annoucement_date_added'].']]></date>';
	    $kanalRSS .= '</item>';
                }
    $kanalRSS .= ' </ad>';
$kanalRSS .= '</trovit>';



$fp = fopen('trovit_oglaszajtu.xml','w');
fwrite($fp,$kanalRSS);
fclose($fp);
?>


#2 mck

mck

    Jestę Blogerę

  • Admin
  • 1544 postów

Napisano 19 luty 2014 - 08:44

Kohana ma dość dobrą funkcję do tego - transliterate_to_ascii(). Próbowałeś ją zaimplementować w swoim skrypcie?



#3 rel

rel

    Początkujący

  • Użytkownik
  • Pip
  • 16 postów

Napisano 19 luty 2014 - 09:13

Kohana ma dość dobrą funkcję do tego - transliterate_to_ascii(). Próbowałeś ją zaimplementować w swoim skrypcie?

 

Na pewno nie, kohana to narazie dla mnie coś, czego zacznę się uczyć, ale poczytam...

A mógłbyś mnie naprowadzić jak to zaimplementowac do mojego kodu? Przyznam, że mam już dość błądzenia...:-)



#4 mck

mck

    Jestę Blogerę

  • Admin
  • 1544 postów

Napisano 19 luty 2014 - 11:08

Po prostu skopiuj całą funkcję do swojego skryptu (możesz zmienić sobie nazwę na krótszą) i uruchom :)



#5 rel

rel

    Początkujący

  • Użytkownik
  • Pip
  • 16 postów

Napisano 19 luty 2014 - 11:55

Po prostu skopiuj całą funkcję do swojego skryptu (możesz zmienić sobie nazwę na krótszą) i uruchom :)

 

Tylko, ze nie bardzo jeszcze łapię jak to zrobić. Sęk w tym, że skopiowanie i wstawienie tego byle gdzie nie da efektów. Możesz to wsadzić w tym pliku, co podesłałem?



#6 mck

mck

    Jestę Blogerę

  • Admin
  • 1544 postów

Napisano 19 luty 2014 - 15:50

No właśnie chodzi o to, żebyś wstawił to to tego pliku, na przykład zaraz za funkcją lacz_bd(). I musisz to wstawić sam, najlepiej otwierając oba pliki w tym samym edytorze, dbając o ich jednakowe kodowanie, bo kopiowanie tego na forum i potem z forum do pliku może strasznie sknocić kodowanie.



#7 rel

rel

    Początkujący

  • Użytkownik
  • Pip
  • 16 postów

Napisano 19 luty 2014 - 19:55

No właśnie chodzi o to, żebyś wstawił to to tego pliku, na przykład zaraz za funkcją lacz_bd(). I musisz to wstawić sam, najlepiej otwierając oba pliki w tym samym edytorze, dbając o ich jednakowe kodowanie, bo kopiowanie tego na forum i potem z forum do pliku może strasznie sknocić kodowanie.

 

Wkleiłem tak jak mówiłeś i niestety nie usuwa pl znaków a do tego pokazuje zapisy 

 

<![CDATA[...jakaś treść...]]>

 

które nie powinny być widoczne, słowem po wklejeniu/użyciu tej funkcji nie interpretuje tego, co powinna interpretować.



#8 nrm

nrm

    webmastah

  • Admin
  • 1106 postów
  • Skąd:Katowice

Napisano 19 luty 2014 - 20:11

a w błędzie jest opis i linie. 



#9 rel

rel

    Początkujący

  • Użytkownik
  • Pip
  • 16 postów

Napisano 19 luty 2014 - 20:22

Wkleiłem tak jak mówiłeś i niestety nie usuwa pl znaków a do tego pokazuje zapisy 

 

<![CDATA[...jakaś treść...]]>

 

które nie powinny być widoczne, słowem po wklejeniu/użyciu tej funkcji nie interpretuje tego, co powinna interpretować.

 

A i zapomniałem dodać, że aby wyświetlało mi zawartość xmla musze nadawać mu kodowanie iso-8859-2, bo przy utf-8 wywala jakiś error.


a w błędzie jest opis i linie. 

 

tzn? możesz troszkę jaśniej...



#10 rel

rel

    Początkujący

  • Użytkownik
  • Pip
  • 16 postów

Napisano 19 luty 2014 - 20:46

Jeżeli zrobię tak:

 

1. plik .php utf-8

2. plik .xml utf-8

 

To wywala mi błąd o treści:

Błąd przetwarzania XML: nieprawidłowo sformowany
Obszar: http://oglaszajtu.pl/trovit_oglaszajtu.xml
Numer wiersza: 1, kolumna 140:<?xml version="1.0" encoding="utf-8"?><trovit><ad><item><id><![CDATA[54]]></id><url><![CDATA[http://oglaszajtu.pl/ogloszenia/54/dom-wieruszw-pow-150m2]]></url><title><![CDATA[Dom Wieruszw, pow. 150m2]]></title><type><![CDATA[For Sale]]></type><content><![CDATA[Ogoszenie testowe!

Czyli jak widać nie usuwa polskich znaków, mało tego pokazuje se jako krzaczki.

 

Jeżeli zrobię tak:

1. plik php utf-8

2. plik xml iso-8859-2

 

to xmla generuje prawie poprawnie, prawie, bo wszystko jest ok poza tym, że pokazuje polskie znaki w urlach

 

Może to dokłądniej opisze mój problem i ktoś podpowie jak go unicestwić, wyeliminować?



#11 Łukasz

Łukasz

    Początkujący

  • Użytkownik
  • Pip
  • 1 postów
  • Skąd:Katowice

Napisano 20 luty 2014 - 15:38

Skorzystaj z iconv(): 

<?php

  setlocale(LC_CTYPE, "pl_PL");
  iconv("UTF-8", "ISO-8859-1//TRANSLIT", $text);

Przełączając locale można obsłużyć w ten sposób więcej języków (np. dla de_DE - ä = ae, ö = oe, ü = ue)



#12 rel

rel

    Początkujący

  • Użytkownik
  • Pip
  • 16 postów

Napisano 26 luty 2014 - 12:00

Skorzystaj z iconv(): 

<?php

  setlocale(LC_CTYPE, "pl_PL");
  iconv("UTF-8", "ISO-8859-1//TRANSLIT", $text);

Przełączając locale można obsłużyć w ten sposób więcej języków (np. dla de_DE - ä = ae, ö = oe, ü = ue)

 

A w którym konkretnie miejscu wg ciebie tego użyc, bo powiem szczerze, że z iconv korzystałem w nieco innym schemacie i nic nie dawało.

 

Możesz to wkleić to mojego kodu, który jest na początku tematu?







Również z jednym lub większą ilością słów kluczowych: php, mysql, xml

Użytkownicy przeglądający ten temat: 0

0 użytkowników, 0 gości, 0 anonimowych