Autor Zpráva
TomasJ
Profil
Zdravím, udělal jsem si vlastní třídu na zakódování nějakého textu. Vše mi fungovalo, používal jsem funkci str_rot13. Ta ovšem podporuje jen a-z A-Z, takže jsem se rozhodl napsat vlastní metodu. V JavaScriptu mi fungovala bezvadně, tak jsem se rozhodl ji převést do PHP. Jenže PHP mi vypisuje poznámky Uninitialized string offset. Nevíte někdo co mám špatně? Dám vám sem část, ve které nejspíš je chyba.
  private $ed;
  private $chr;
  
  public function __construct(){
    $this->ed  = false;
    $this->chr = '0123456789ABCDEFGHIJKLMNOQRSTUVWXYZ.,:!?=%/()[]{}+-*abcdefghijklmnopqrstuvwxyz$_&~^"\'°<>§;ĚËŠČŘŽÝÁÄÍÉÖÓÔÜÚŮĎŤŇ ěëščřžýáäíéöóôüúůďťň#@\\´|';
  }
  
  //Tady asi bude někde chyba
  private function rot($str){
    $out = "";
    for($i=0;$i<strlen($str);$i++){
      if(stripos($this->chr,$str[$i])>-1){
        for($a=0;$a<strlen($this->chr);$i++){
          if(isset($this->chr[$a]) && $str[$i]==$this->chr[$a]){ //30. řádek
            $p = strlen($this->chr)/2;
            if($a+$p+1>$p*2) $out.=$this->chr[$p-($p*2-$a)];
            else $out.=$this->chr[$a+$p];
          }
        }
      }
      else $out.=$str[$i];
    }
    return $out;
  }
Děkuji za jakékoliv rady

Po 30. sekundách se přestanou poznámky vypisovat a skript skončí z důvodu překročení limitu.
Jo málem bych zapomněl, "chyba" je na 30. řádku (označeno v kódu) - k tomuto řádku se poznámky píší.
Tori
Profil
TomasJ:
JavaScript podporuje utf8. PHP ne, strlen počítá bajty (nikoli znaky). Nevím, jaký znak to vrátí v případě, že zápisem $string[3] požadujete část vícebajtového znaku, v tom asi bude problém. Zkuste místo řetězce použít pole znaků (strlen -> count, atd.).
Keeehi
Profil
Tori:
PHP zvládá utf-8. Já osobně jiné kódování než utf-8 nepoužívám. Ale ano, strlen nefunguje správně s multibytovými kódováními. Proto jsou v PHP funkce na práci s nimi. K strlen je ekvivalentní mb_strlen.
TomasJ
Profil
Keeehi:
No, počítám, že prohození strlen za mb_strlen asi nestačí, že?
Mohl by jsi mi poradit prosím? Fakt mě nenapadá jak to vyřešit. Snad mb_convert_encoding?

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm: