Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: string: Zamiana multi-linii na pojedynczą
Forum PHP.pl > Forum > PHP
crocodillo
Witam.

Potrzebuję funkcji kodującej / dekodującej tekst do pojedynczej linii. Nie wiem teraz, czy jest jakaś funkcja, którą mógłbym wykorzystać, czy raczej muszę sam to zrobić?

Chodzi mi o coś w rodzaju urlencode() / urldecode(), tylko żeby zamieniało samo PHP_EOL.

Od razu zaznaczam, że nie chodzi mi o str_replace(PHP_EOL,'',$a). Potrzebuję też to odkodować.

Zrobiłem coś takiego:

(kod jest częścią pewnej klasy, już nie chciało mi się wycinać niepotrzebnych rzeczy)
  1. {
  2.  
  3. //...
  4.  
  5.  
  6. public function chrCode($characters,$txt=false,$specChar='%') {
  7.  
  8. $obj=($txt===false && isset($this)); if ($obj) $txt = &$this->string;
  9.  
  10. self::prepare_cc($characters,$specChar);
  11.  
  12. $txt=str_replace($specChar,$specChar.'00',$txt);
  13. $txt=str_replace(self::$cc_from,self::$cc_to,$txt);
  14.  
  15. return $obj ? $this : $txt;
  16.  
  17. }
  18.  
  19. //-------------------------------------------------
  20.  
  21. public function chrDecode($characters, $txt=false, $specChar='%') {
  22.  
  23. $obj=($txt===false && isset($this)); if ($obj) $txt = &$this->string;
  24.  
  25. self::prepare_cc($characters,$specChar);
  26.  
  27. $txt=str_replace(self::$cc_to,self::$cc_from,$txt);
  28. $txt=str_replace($specChar.'00',$specChar,$txt);
  29.  
  30. return $obj ? $this : $txt;
  31.  
  32. }
  33.  
  34.  
  35. //-------------------------------------------------
  36.  
  37. protected function prepare_cc($chrs,$specChar) {
  38.  
  39. if ($chrs == self::$cc_chrs) return; // już było prędzej przygotowane
  40.  
  41. if (!$chrs) {
  42. self::$cc_chrs=null;
  43. return;
  44. }
  45.  
  46.  
  47. self::$cc_chrs = $chrs;
  48. self::$cc_from=array();
  49. self::$cc_to=array();
  50.  
  51. for($a=0;$a<strlen($chrs);$a++) {
  52. self::$cc_from[] = $chrs[$a];
  53. self::$cc_to[] = $specChar.sprintf('%02x',$a+1);
  54. }
  55. }
  56.  
  57. }


Tylko nie wiem, czy czasami nie ma wbudowanej funkcji, która wykona dokładnie to samo.
kyku
nie wiem czy dokladnie o to Ci chodzi, troche zamieszałeś
ale wnioskując po nazwie tematu:
  1. $string = 'Tekst
  2.  
  3. tekst
  4.  
  5.  
  6.  
  7. tekst';
  8. while(strpos($string, "\n\n")!==false){
  9. $string = str_replace("\n\n","\n",$string);
  10. }
  11. echo $string;

zwroci:
Tekst
tekst
tekst

// ok, przeczytalem temat jeszcze raz, chodzi Ci pewnie o jakas funkcje kodujaca, np: base64_encode (base64_decode mozesz otrzymac spowrotem ten kod)
mozesz tez zrobic cos takiego:
  1. $wjednejlinii= str_replace("\n", "[ENTER]", $tekst);
i
  1. $odwroc = str_replace("[ENTER]","\n",$tekst);
crocodillo
Cytat(kyku @ 4.03.2012, 13:23:06 ) *
// ok, przeczytalem temat jeszcze raz, chodzi Ci pewnie o jakas funkcje kodujaca, np: base64_encode (base64_decode mozesz otrzymac spowrotem ten kod)
mozesz tez zrobic cos takiego:
  1. $wjednejlinii= str_replace("\n", "[ENTER]", $tekst);
i
  1. $odwroc = str_replace("[ENTER]","\n",$tekst);



Nie dokładnie o to mi chodzi, bo tekst może być np taki:

coś tam, coś tam [ENTER] coś jeszcze
i coś jeszcze i jeszcze


to po zamianie w 2 strony otrzymamy:


coś tam, coś tam
coś jeszcze
i coś jeszcze i jeszcze


Chodziło mi o funkcję kodującą / dekodującą wybrane znaki. base64 odpada ze względu na kodowanie całego tekstu (już nie wspominając o objętości).
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.