Страница 1 от 2 12 ПоследноПоследно
Резултати от 1 до 15 от общо 16

Encoding в php на готов guestbook - проблем

Сподели във Facebook Сподели в Twitter Изпрати на Email Сподели в LinkedIn
  1. Member Аватара на devil
    Тук е от
    Jun 2002
    Живее в
    София
    Мнения
    408
    #1

    Encoding в php на готов guestbook - проблем

    Здравейте,

    Да кажа - хал хабер си нямам от PHP. Но бих искал да помоля за помощ. Иде приказка за следния код (води се guestbook). Проблемът е такъв - всичко въведено в guestbook-а излиза в нечетим вид. Предполагам трябва да се посочи кодировка, някъде в самия скрипт, но не съм сигурен нито къде, нито какъв точно е синтаксиса (в хедър и футър съм вмъкнал съответня код с цел напасване на guestbook-а към layout-а на страницата, с UTF encoding но така или иначе това на guestbook-a не влияе (умишлено не давам адрес към страницата, за да не бъде тълкувано като опит за реклама). Самия скрипт е свален от тук. Направих запитване и към създателя на guestbook-а, но кога ще ми отговори е Божа работа. Та ще бъда изключително задължен за всякаква помощ.

    Код:
    <html>
    <body>
    <!-- 12345 -->
    
    <?php
    // Written by XeroXer at XeroXer.com. Credz to Major_Meatbone and tcp for helping me solve the admin area problem and and the storing of entrys. :)
    // You may use this script freely on any site you wish.
    
    // --------------------------------------------------
    // EDIT SETTINGS FOR YOUR GUESTBOOK!
    // --------------------------------------------------
    $gbfile = "guestbook.txt"; // The file that all guestbook entrys should be saved in.
    $dateshow = "Y-m-d - H:i:s"; // Decides how the date should be shown. http://www.w3schools.com/php/func_date_date.asp
    $username = "user"; // Admin username.
    $password = "pass"; // Admin password.
    $notlog = "Not logged in!"; // Text to show when the user enters wrong username or password.
    $thankstxt = "Thank you for writing in my guestbook!"; // The text that the user will see after entering something in the guestbook.
    $errorrequire = "Required fields are name and message!"; // Text the user will see if the requested fields was not entered.
    $gbedited = "Guestbook has been edited!"; // Text to print out when guestbook has been edited.
    $nogbedited = "No entrys selected to be removed!"; // Text to print out when no entrys where selected for removal.
    $smsgstart = "<meta http-equiv=\"refresh\" content=\"3;URL=?id=\" /><p>"; // Start of every message printed out.
    $smsgend = "<br />You will be sent back in 3 seconds. If not click <a href=\"?id=\">here</a></p>"; // End of every message printed out.
    
    // --------------------------------------------------
    // NO EDIT NEEDED BELOW THIS LINE!
    // --------------------------------------------------
    $arr = file($gbfile);
    $mdpass = md5($password);
    $date = date($dateshow);
    $name = htmlentities(strip_tags($_POST['name']));
    $email = htmlentities(strip_tags($_POST['email']));
    if($_POST['homepage'] == "" || $_POST['homepage'] == "http://") {
       $homepage = "";
    } else {
       $homepage = htmlentities(strip_tags($_POST['homepage']));
    }
    $message = nl2br(htmlentities(strip_tags($_POST['message'])));
    $message = str_replace(array("\r", "\n"), '', $message);
    $message = wordwrap($message, 75, "<br />", true);
    $name = str_replace(';', '.-_.-_', $name);
    $email = str_replace(';', '.-_.-_', $email);
    $homepage = str_replace(';', '.-_.-_', $homepage);
    $message = str_replace(';', '.-_.-_', $message);
    $writeinfo = "{$date};{$name};{$email};{$homepage};{$message}\n";
    
    switch($_GET['id'])
    {
    
    // DEFAULT GUESTBOOK PAGE
    default:
       echo "<p align=\"left\"><a href=\"?id=login\">Admin</a></p>\n";
       echo "<table align=\"center\"><form action=\"?id=write\" method=\"post\" name=\"submitform\">\n";
       echo "<tr><td><strong>Name: *</strong></td><td><input type=\"text\" name=\"name\" size=\"40\" maxlength=\"50\" /></td></tr>\n";
       echo "<tr><td><strong>Email:</strong></td><td><input type=\"text\" name=\"email\" size=\"40\" maxlength=\"50\" /></td></tr>\n";
       echo "<tr><td><strong>Homepage:</strong></td><td><input type=\"text\" name=\"homepage\" size=\"40\" maxlength=\"50\" value=\"http://\" /></td></tr>\n";
       echo "<tr><td valign=\"top\"><strong>Message: *</strong></td><td><textarea name=\"message\" cols=\"30\" rows=\"7\"></textarea></td></tr>\n";
       echo "<tr><td></td><td><input type=\"submit\" name=\"submit\" value=\"Submit\" /></td></tr>\n";
       echo "</form></table><br />\n\n";
    
       $gb = file($gbfile);
       $gb = array_reverse($gb);
       foreach ($gb as $guestbook) {
          $gastbok = stripslashes($guestbook);
          list($datum, $namn, $epost, $hemsida, $meddelande) = split(';', $gastbok);
          $namn = str_replace('.-_.-_',';',$namn);
          $epost = str_replace('.-_.-_',';',$epost);
          $hemsida = str_replace('.-_.-_',';',$hemsida);
          $meddelande = str_replace('.-_.-_',';',$meddelande);
          echo "<table width=\"400\" border=\"1\" align=\"center\">\n";
          echo "<tr><td width=\"80\"><strong>Date:</strong></td><td width=\"320\">{$datum}</td></tr>\n";
          echo "<tr><td><strong>Name:</strong></td><td>".($epost == "" ? "" : "<a href=\"mailto:{$epost}\">")."{$namn}".($epost == "" ? "" : "</a>")."</td></tr>\n";
          if(!$hemsida) {
             echo "";
          } else {
             echo "<tr><td><strong>Homepage:</strong></td><td><a href=\"{$hemsida}\" target=\"_blank\">{$hemsida}</a></td></tr>\n";
          }
          echo "<tr><td><strong>Message:</strong></td><td>{$meddelande}</td></tr>\n";
          echo "</table><br />\n\n";
       }
    break;
    
    // WRITE ENTRYS TO FILE
    case write:
       if($name == "" || $message == "") {
          echo "{$smsgstart}{$errorrequire}{$smsgend}";
       } else {
       $printer = fopen($gbfile, 'a');
       fwrite($printer,$writeinfo);
       fclose($printer);
       
       echo "{$smsgstart}{$thankstxt}{$smsgend}";
       }
    break;
    
    // LOGIN TO ADMIN SECTION
    case login:
       echo "<p align=\"left\"><a href=\"?id=\">Back</a></p>\n";
       echo "<table align=\"center\"><form action=\"?id=admin\" method=\"post\" name=\"submitform\">\n";
       echo "<tr><td><strong>Username:</strong></td><td><input type=\"text\" name=\"adminname\" size=\"20\" /></td></tr>\n";
       echo "<tr><td><strong>Password:</strong></td><td><input type=\"password\" name=\"adminpass\" size=\"20\" /></td></tr>\n";
       echo "<tr><td></td><td><input type=\"submit\" name=\"submit\" value=\"Login\" /></td></tr>\n";
       echo "</form></table>\n";
    break;
    
    // LISTING ALL ENTRYS FOR REMOVING
    case admin:
       if($_POST["adminname"] == $username && $_POST["adminpass"] == $password) {
          $verpass = md5($_POST['adminpass']);
          echo "<p align=\"left\"><a href=\"?id=\">Back</a></p>\n";
          echo "<table align=\"center\">\n";
          echo "<form action=?id=delete method=POST>\n";
          echo "<tr><td>\n";
          foreach ($arr as $line_num => $line) {
             echo "<input type=checkbox name=delete&#91;] value={$line_num} />[D] <b>Entry #{$line_num}</b>:\n";
             list($datum, $namn, $epost, $hemsida, $meddelande) = split(';', $line);
             $namn = str_replace('.-_.-_',';',$namn);
             $epost = str_replace('.-_.-_',';',$epost);
             $hemsida = str_replace('.-_.-_',';',$hemsida);
             $meddelande = str_replace('.-_.-_',';',$meddelande);
             echo "<table width=\"400\" border=\"1\" align=\"center\">\n";
             echo "<tr><td width=\"80\"><strong>Date:</strong></td><td width=\"320\">{$datum}</td</tr>\n";
             echo "<tr><td><strong>Name:</strong></td><td>".($epost == "" ? "" : "<a href=\"mailto:{$epost}\">")."{$namn}".($epost == "" ? "" : "</a>")."</td></tr>\n";
             if(!$hemsida) {
                echo "";
             } else {
                echo "<tr><td><strong>Homepage:</strong></td><td><a href=\"{$hemsida}\" target=\"_blank\">{$hemsida}</a></td></tr>\n";
             }
             echo "<tr><td><strong>Message:</strong></td><td>{$meddelande}</td></tr>\n";
             echo "</table><br />\n\n";
          }
          echo "</td></tr>\n<tr><td>\n";
          echo "<input type=\"hidden\" name=\"psw\" value=\"{$verpass}\" />\n";
          echo "<input type=submit value=remove />\n</form>\n";
          echo "</td></tr></table>\n";
       } else {
          echo "{$smsgstart}{$notlog}{$smsgend}";
       }
    break;
    
    // DELETING SELECTED POSTS
    case delete:
       if($_POST["psw"] == $mdpass) {
          if($_POST['delete'] != "") {
             foreach($_POST['delete'] as $key => $val) {
                unset($arr[$val]);
    
                // >> PHP VERSION CHECK AND FUNCTIONS
                $pversion = phpversion();
                $version = $pversion{0};
                if($version == "5") {
                   file_put_contents($gbfile, join("", $arr));
                } else {
                   $handle = fopen($gbfile, 'w');
                   fwrite($handle, join("", $arr));
                   fclose($handle);
                }
                // << PHP VERSION CHECK AND FUNCTIONS
    
             }
             echo "{$smsgstart}{$gbedited}{$smsgend}";
          } else {
             echo "{$smsgstart}{$nogbedited}{$smsgend}";
          }
       } else {
          echo "{$smsgstart}{$notlog}{$smsgend}";
       }
    break;
    }
    ?>
    
    
    <!-- 54321 -->
    </body>
    </html>

  2.  
     
  3. Senior Member
    Тук е от
    Nov 2002
    Мнения
    1,594
    #2

    Re: Encoding в php на готов guestbook - проблем

    Слагаш енкодинга в хеда на страницата.
    Цък

  4. Member Аватара на devil
    Тук е от
    Jun 2002
    Живее в
    София
    Мнения
    408
    #3

    Re: Encoding в php на готов guestbook - проблем

    Тю, дяволска работа - това пак забравих да го кажа. Самия guestbook съм го наврял в някакъв layout (и хедъра си има съответно UTF-8 encoding). Това обаче не решава проблема със четивноста на записите в книгата по никакъв начин. С риск някой да ме обвини в реклама, но в действие това може да се види ето тук.

  5. Senior Member
    Тук е от
    Nov 2002
    Мнения
    1,594
    #4

    Re: Encoding в php на готов guestbook - проблем

    Не виждам оригиналният тхт файл в който се пише... Виж в него какво става. Но имам една две идеи как да се оправи. Чукни ми в ICQ, ако не ти се разправя тука.

  6. Member Аватара на devil
    Тук е от
    Jun 2002
    Живее в
    София
    Мнения
    408
    #5

    Re: Encoding в php на готов guestbook - проблем

    Ми в него (в txt-то) записите въведени на латиница си излизат нормално (както прочем и на сайта), кирилицата - на маймуни (линк).

  7. Member
    Тук е от
    Nov 2005
    Мнения
    295
    #6

    Re: Encoding в php на готов guestbook - проблем

    Пробвай първо да докараш сайта по W3C стандартите.
    Например, имаш 2 <body> и нито един <head> елемент.
    Възможно е браузърите да не познават <meta> tag-а за енкодинга.

  8.  
     
  9. Member Аватара на devil
    Тук е от
    Jun 2002
    Живее в
    София
    Мнения
    408
    #7

    Re: Encoding в php на готов guestbook - проблем

    Цитат Първоначално публикувано от dmanov
    Пробвай първо да докараш сайта по W3C стандартите.
    Например, имаш 2 <body> и нито един <head> елемент.
    Възможно е браузърите да не познават <meta> tag-а за енкодинга.
    Дам, в процеса на copy-paste-ването очевидно наистина съм затрил отварящия на head елемента (дублирането на body се чудя как се е получило). Anyway, това го оправих, но промяна по отношение на проблема няма.

  10. Member
    Тук е от
    Dec 2004
    Мнения
    542
    #8

    Re: Encoding в php на готов guestbook - проблем

    Проблемът ти идва от позистването на входящите данни според мен, само за теста промени:

    Код:
    $name = htmlentities(strip_tags($_POST['name']));
    със

    Код:
    $name = $_POST['name'];
    и виж дали става

  11. Senior Member
    Тук е от
    Nov 2002
    Мнения
    1,594
    #9

    Re: Encoding в php на готов guestbook - проблем

    Добре де... виж какво има в тхт файла.
    Проблема не е в хедовете, проблема е че някъде по трасето минаваш през 7 битов енкодинг и резултата е на лице.

  12. Member Аватара на devil
    Тук е от
    Jun 2002
    Живее в
    София
    Мнения
    408
    #10

    Re: Encoding в php на готов guestbook - проблем

    Цитат Първоначално публикувано от mitkko
    Проблемът ти идва от позистването на входящите данни според мен, само за теста промени:

    Код:
    $name = htmlentities(strip_tags($_POST['name']));
    със

    Код:
    $name = $_POST['name'];
    и виж дали става
    Златна работа си! Така заспива по отношение на името (то си излиза на кирилица), но съобщението все още излиза маймунско. Ако речеш какво да му направя и на него, ще съм ти вечно задължен!

    Цитат Първоначално публикувано от fori
    Добре де... виж какво има в тхт файла.
    Проблема не е в хедовете, проблема е че някъде по трасето минаваш през 7 битов енкодинг и резултата е на лице.
    Ами то аз горе съм постнал как изглежда тхт файла, повече от това какво да видя?

  13. Member
    Тук е от
    Dec 2004
    Мнения
    542
    #11

    Re: Encoding в php на готов guestbook - проблем

    Код:
    $message = nl2br(htmlentities(strip_tags($_POST['message'])));
    го смени на

    Код:
    $message = $_POST['message'];
    имай обаче предвид, че това не е пълно решение, показва само къде се чупи цялото нещо, пак трябва да си изчистиш входните данни за да не те хакне някой ;-)

  14.  
     
  15. Senior Member
    Тук е от
    Nov 2002
    Мнения
    1,594
    #12

    Re: Encoding в php на готов guestbook - проблем

    Мда... Имайки предвид реализацията...
    Вкарване на произволен хтмл код...

  16. Member Аватара на devil
    Тук е от
    Jun 2002
    Живее в
    София
    Мнения
    408
    #13

    Re: Encoding в php на готов guestbook - проблем

    Цитат Първоначално публикувано от mitkko
    Код:
    $message = nl2br(htmlentities(strip_tags($_POST['message'])));
    го смени на

    Код:
    $message = $_POST['message'];
    имай обаче предвид, че това не е пълно решение, показва само къде се чупи цялото нещо, пак трябва да си изчистиш входните данни за да не те хакне някой ;-)
    Това добре, обаче сега като отворя страницата (а и след като събмитна) ми отваря празен алерт, на който трябва първо да дам ок, за да мога да продължа...това като как да се оттърва от него? А иначе че е куц скрипта - това ясно, но за парите който са платени ми липсва желание да търся по-елегнтни и добре реализирани решения. Т.е. бих го сменил с нещо друго, само че времето което ще отиде за търсене и ръчкане one by one...нещо не ме влече.

  17. Senior Member
    Тук е от
    Nov 2002
    Мнения
    1,594
    #14

    Re: Encoding в php на готов guestbook - проблем

    О, комерсиален проект... Така да беше казал в началото. Струва ми се че дължиш на mitkko бира... Това за парите няма да го кометирам че ще стана много груб.

  18. Member
    Тук е от
    Dec 2004
    Мнения
    542
    #15

    Re: Encoding в php на готов guestbook - проблем

    Ами празния алерт е защото сложих безобиден коментар там, който отново да ти напомня да дезинфекцираш входните данни, моят е празен, но не се знае някой с лоши намерения какво може да напише във формата

Сподели във Facebook Сподели в Google Plus Сподели в Twitter Изпрати на Email Сподели в LinkedIn
Страница 1 от 2 12 ПоследноПоследно

Подобни теми

  1. Encoding проблем
    От Malone във форум Общ - софтуер
    Отговори: 10
    Последно: 27-01-08, 12:30
  2. Apache и encoding
    От The Mask във форум Linux
    Отговори: 2
    Последно: 04-05-04, 09:59
  3. Stranen problem s encoding v XP & IE6 SP1 v web!
    От s01o във форум Windows
    Отговори: 8
    Последно: 14-04-04, 19:35
  4. Проблем с encoding
    От jiroscop във форум Уебдизайн и 3D
    Отговори: 7
    Последно: 16-05-03, 09:41
  5. MP3 encoding/decoding/playback
    От Cko във форум Общ - софтуер
    Отговори: 4
    Последно: 21-01-03, 22:14

SetCombG.com
SetCombG.com е портален сайт и Форум за битова техника, телевизори, климатици, лаптопи и смартфони, създаден през 1999 година.
Заедно сме над 20 години!
Следвай ни
Горе