Ankündigung

Einklappen
Keine Ankündigung bisher.

Zeichenkonvertierung ASCII in UTF-8

Einklappen
X
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • Zeichenkonvertierung ASCII in UTF-8

    Ich hab gerade ein SVN post-commit hack bearbeiten wollen und feststellen müssen, dass mir SVN die Nachrichten in einem komischen Format ausgibt.

    - "Edit Customer" ?\195?\188berarbeitet
    - ?\195?\156berschrift Neuigkeiten etwas kleiner (h1 zu h3)
    - CSS Border bei Input Checkboxes ver?\195?\164ndert
    Diese Form der Zeichenkonvertierung ist mir irgendwie neu, hat irgendjemand eine Ahnung, wie ich dass ordentlich konvertieren kann? Ein paar Sachen hab ich bei Google gefunden, aber nach einer Stunde probieren musste ich jetzt aufgeben.

    * SVN log message encoding problem - Ash Searle’s Blog
    [URL="http://www.6wunderkinder.com"]6 Wunderkinder - Business. Evolved.[/URL]


  • #2
    hab gerade ein SVN post-commit hack bearbeiten wollen
    arg allgemein.
    --

    „Emoticons machen einen Beitrag etwas freundlicher. Deine wirken zwar fachlich richtig sein, aber meist ziemlich uninteressant.
    Wenn man nur Text sieht, haben viele junge Entwickler keine interesse, diese stumpfen Texte zu lesen.“


    --

    Kommentar


    • #3
      Welche Lokale ist denn auf dem System im Gebrauch wo das SVN läuft und welche bei dir ?
      robo47.net - Blog, Codeschnipsel und mehr
      | Caching-Klassen und Opcode Caches in php | Robo47 Components - PHP Library extending Zend Framework

      Kommentar


      • #4
        Ok, dann ein paar mehr Details

        - Der Server läuft auf Debian etch (PHP 5.0.
        - Locales sind (laut dpkg-reconfigure locales) de_DE ISO-8859-1 / de_DE.UTF-8 UTF-8 und de_DE@euro ISO-8859-1

        Ich glaube nicht dass das an einer Serverkonfiguration liegt.

        Der SVN post-commit hook ist relativ simpel. Die aktuellen Änderungen werden bei einem commit ausgelesen und sollen an Basecamp (unser Projektmanagementsystem) übermittelt werden. Das ganze funktioniert auch wunderbar, allerdings werden halt Sonderzeichen (äöüÄÖÜß) umcodiert.

        Entwickelt wird mit Aptana (SVN zeigt übrigens die Sonderzeichen wunderbar an).

        Original stammt der SVN Hook von dieser Seite Subversion / Basecamp integration using PHP | Whompbox .

        notify.php (diese Datei startet die nur die Routine)
        PHP-Code:
        #! /usr/bin/env php
        <?php

        require_once('BasecampSVN.php');

        [...]

        $repo_path     $argv[1];
        $rev           $argv[2];

        $bc = new BasecampSVN($bc_user$bc_password$bc_project_id$bc_base_url);
        $bc->notify_company($bc_company_id);
        $bc->is_private false;
        $bc->send_commit_info($repo_path$rev$bc_category_id); //HIER

        ?>
        BasecampSVN.php (hier die Routine)
        PHP-Code:
        function send_commit_info($repo_path$revision$category_id) {
            
        $revision trim($revision);
            
        $author   trim(`svnlook author {$repo_path} -r {$revision}`);
            
        $date     trim(`svnlook date {$repo_path} -r {$revision}`);
            
        $message  trim(`svnlook log {$repo_path} -r {$revision}`);
            
        $changed  trim(`svnlook changed {$repo_path} -r {$revision}`);
            
            
        // Parse the date nicely
            // FIXME: messy
            // TODO: use a nice reg exp
            
        $date str_replace('('''$date);
            
        $date str_replace(')'''$date);
            
        $date str_replace(','''$date);
            
        $bits explode(" "$date);
            
            
        $date "$bits[3]$bits[4] $bits[5] $bits[6] - $bits[1]";
            
            
        // Put each file that has been changed into an array
            
        $temp = array();
            
        $temp explode("\n"$changed);
            
        // Make the codes more readable
            // A  => Item Added
            // D  => Item Deleted
            // U  => Item Contents Updated
            // _U => Item Properties Updated
            // UU => Item Contents and Properties Updated
            
            
        $files "";
            
            foreach (
        $temp as $tmp) {
                
        $bits explode(" "$tmp);
                
                
        $action $bits[0];
                
        $file $bits[sizeof($bits)-1];
                
                switch (
        $action) {
                    case 
        'A':
                        
        $act 'Added';
                        break;
                    case 
        'D':
                        
        $act 'Deleted';
                        break;
                    case 
        'U':
                        
        $act 'Updated';
                        break;            
                    case 
        '_U':
                        
        $act 'Updated';
                        break;            
                    case 
        'UU':
                        
        $act 'Updated';
                        break;
                }
                
        $act str_pad($act12);
                
        $act str_replace(' ''&ensp;'$act);
                
        $files .= "*{background: #dfdfdf; font-family: monospace; } " $act $file "\n";
                
            }
            
            
        $msg_title "SVN - Neue Version: $revision";
            
            
        // using texile markup
            // some html markup (for multiline log messages)
            // only way to make it output valid html
            
        $msg_body = <<<body
        *Entwickler:* $author
        *Datum:* 
        $date

        *Beschreibung:*

        <pre style="display: block; padding:5px; background:#dfdfdf;">
        $message</pre>

        *Veränderte Dateien:*
        $files
        body;
            
            
        $msg = array(
                
        'category-id' => $category_id,
                
        'title' => $msg_title,
                
        'body' => $msg_body,
                
        'use-textile' => '1',
                
        'private' => "$this->is_private",
            );
            
            
        $this->bc->create_message($this->project_id$msg$this->notify);
                

        WICHTIG:

        PHP-Code:
        $message  trim(`svnlook log {$repo_path} -r {$revision}`); 
        Hier würde ich natürlich gerne diese Sonderzeichen umwandeln.


        Es gibt eigentlich nur 2 Möglichkeiten:

        1.) Entweder gibt mir SVN die Zeichen in einem bestimmten Format zurück.
        oder
        2.) Basecamp wandelt diese Zeichen beim Upload ins ASCII Format um (wobei ich davon aber echt nicht ausgehe) - Die Dokumentation ist übrigens hier Basecamp API



        Ich hoffe das war etwas hilfreicher. Ich bin für jede Hilfe dankbar!!!
        [URL="http://www.6wunderkinder.com"]6 Wunderkinder - Business. Evolved.[/URL]

        Kommentar


        • #5
          So werden übrigens die Informationen an Basecamp übermittelt (basecamp.php)


          PHP-Code:
              function create_message($project_id$message$notify false) {
                  
          $request['post'] = $message;
                  if (
          $notify) {$request['notify'] = $notify;}
                  return 
          $this->hook("/projects/{$project_id}/msg/create","post",$request);
              } 
          PHP-Code:
              function hook($url,$expected,$send false) {
                  
          $returned $this->unserialize($this->request($url,$send));
                  
          $placement $expected;
                  if (isset(
          $returned->{$expected})) {
                      
          $this->{$placement} = $returned->{$expected};    
                      return 
          $returned->{$expected};
                  } else {
                      
          $this->{$placement} = $returned;
                      return 
          $returned;
                  }
              }
              
              function 
          request($url$params false) {
                  
          //do the connect to a server thing
                  
          $req =& new HTTP_Request($this->base $url);
                  
          //authorize
                  
          $req->setBasicAuth($this->user$this->pass);
                  
          //set the headers
                  
          $req->addHeader("Accept""application/xml");
                  
          $req->addHeader("Content-Type""application/xml");
                  
          //if were sending stuff
                  
          if ($params) {
                      
          //serialize the data
                      
          $xml $this->serialize($params);
                      
          //print_r($xml);
                      
          ($xml)?$req->setBody($xml):false;
                      
          $req->setMethod(HTTP_REQUEST_METHOD_POST);
                  }
                  
          $response $req->sendRequest();
                  
          //print_r($req->getResponseHeader());
                  //echo $req->getResponseCode() .    "\n";
                  
                  
          if (PEAR::isError($response)) {
                      return 
          $response->getMessage();
                  } else {
                      
          //print_r($req->getResponseBody());
                      
          return $req->getResponseBody();
                  }
              } 
          [URL="http://www.6wunderkinder.com"]6 Wunderkinder - Business. Evolved.[/URL]

          Kommentar


          • #6
            SVN nutzt meines wissens nach die Locale die der Benutzer nutzt mit dem das SVN läuft, es wäre also wichtig zu wissen unter welchen Nutzer dein SVN selbst läuft und welche locale dieser eingestellt hat, und dann mal schauen was passiert wenn man die locale umstellt und etwas committet, bzw. sich commit-messages anzeigen lässt, dann spart man sich den aufwand irgendwas "komisches" encodieren zu müssen.
            robo47.net - Blog, Codeschnipsel und mehr
            | Caching-Klassen und Opcode Caches in php | Robo47 Components - PHP Library extending Zend Framework

            Kommentar

            Lädt...
            X