За последние 24 часа нас посетили 50894 программиста и 1736 роботов. Сейчас ищут 902 программиста ...

ldap_add и русские значение

Тема в разделе "PHP для новичков", создана пользователем skeletor, 2 июл 2010.

  1. skeletor

    skeletor Активный пользователь

    С нами с:
    5 июн 2010
    Сообщения:
    28
    Симпатии:
    0
    Адрес:
    Kiev
    Есть html-форма, через неё методом POST передаются значения полей, которые заполнил пользователь. Вот код формы:
    HTML:
    1. <form action="ldapadd.php" method=post>
    2. <table border=0>
    3. <tr bgcolor=#cccccc>
    4.   <td width=150>Item</td>
    5.   <td width=15>Entire</td>
    6. </tr>
    7. <tr>
    8.   <td>CN</td>
    9.   <td align=left><input type="text" name="id_cn" size=120 maxlength=120></td>
    10. </tr>
    11. <tr>
    12.   <td>SN</td>
    13.   <td align=left><input type="text" name="id_sn" size=120 maxlength=120></td>
    14. </tr>
    15. <tr>
    16.   <td>EMAIL</td>
    17.   <td align=left><input type="text" name="id_mail" size=120 maxlength=120></td>
    18. </tr>
    19. <tr>
    20.   <td colspan=2 align=center><input type=submit value="Submit Order"></td>
    21. </tr>
    22. </form>

    А вот код ldapadd.php


    PHP:
    1. <?
    2.  
    3.   // create short variable names
    4. $id_cn = $_POST['id_cn'];
    5. $id_sn = $_POST['id_sn'];
    6. $id_mail = $_POST['id_mail'];
    7.  
    8. //$DOCUMENT_ROOT = $_SERVER['DOCUMENT_ROOT'];
    9.  
    10.  
    11. $ldaphost='ldap://10.0.3.185';
    12. $ldapport='389';
    13. $ldapuser='cn=book_rw,ou=people,dc=domain,dc=lin';
    14. $ldappassword='book_rw';
    15. $dc='ou=addressbook,dc=domain,dc=lin';
    16. $attr = array('cn','mail','sn');
    17. $filter='(&(objectclass=*))';
    18.  
    19. $ldapconn = ldap_connect($ldaphost, $ldapport)
    20.           or die("Could not connect to $ldaphost" . ldap_error($ldapconn));
    21.  
    22. if (ldap_set_option($ldapconn,LDAP_OPT_PROTOCOL_VERSION,3))
    23. {
    24.     echo "Using LDAP v3";
    25. }else{
    26.         echo "Failed to set version to protocol 3";
    27. }
    28.  
    29.  
    30. if ($bind=ldap_bind($ldapconn, $ldapuser, $ldappassword)) {
    31.     echo("Login correct");
    32. }
    33. else
    34. {
    35.     echo("Unable to bind to server.</br>");
    36.     echo("msg:'".ldap_error($bind)."'</br>");
    37. }
    38.  
    39.  
    40. $info["cn"] = $id_cn;
    41. $info["sn"] = $id_sn;
    42. $info["mail"] = $id_mail;
    43. $info["objectclass"] = "inetOrgPerson";
    44.  
    45. ldap_add($ldapconn,"cn=$id_cn,$dc",$info) or die("Could not add new entry!" . ldap_error($ldapconn));
    46.  
    47. ldap_unbind($ldapconn);
    48.  
    49. ?>
    Проблема заключается в том, что если пользователь вводит текст на кирилице, то вылазит ошибка (если латиницей, то всё нормально):

    Код (Text):
    1. Warning: ldap_add() [function.ldap-add]: Add: Invalid DN syntax in /var/www/localhost/htdocs/ldapadd.php on line 69
    2. Could not add new entry!Invalid DN syntax
    Сервер локализирован под UTF-8. Если в самом ldapadd.php написать ручками на русском значения то отрабатывает нормально. Если выводить передаваемые от формы значения, то тоже выводится нормально.

    Подскажите, как можно решить эту проблему?
     
  2. Padaboo

    Padaboo Старожил
    Команда форума Модератор

    С нами с:
    26 окт 2009
    Сообщения:
    5.242
    Симпатии:
    1
    skeletor
    о, а что это за пингвин у вас на аватарке?
    кстати на аву можно ставить только личные фото
     
  3. skeletor

    skeletor Активный пользователь

    С нами с:
    5 июн 2010
    Сообщения:
    28
    Симпатии:
    0
    Адрес:
    Kiev
    Не знал, постараюсь в скором времени сменить. А можно помочь по теме?
    Спасибо.
     
  4. Padaboo

    Padaboo Старожил
    Команда форума Модератор

    С нами с:
    26 окт 2009
    Сообщения:
    5.242
    Симпатии:
    1
    skeletor
    можете пока просто удалить аватарку, отредактировать первый пост, заменить теги [code ][ /code] на html и php (я не придираюсь просто читать неудобно )
    зы: так что это за пингвин?)
     
  5. skeletor

    skeletor Активный пользователь

    С нами с:
    5 июн 2010
    Сообщения:
    28
    Симпатии:
    0
    Адрес:
    Kiev
    Честно говоря не понял юмора.
     
  6. jenya777777

    jenya777777 Активный пользователь

    С нами с:
    16 мар 2010
    Сообщения:
    562
    Симпатии:
    0
    Символ Линукса я думаю
     
  7. Padaboo

    Padaboo Старожил
    Команда форума Модератор

    С нами с:
    26 окт 2009
    Сообщения:
    5.242
    Симпатии:
    1
    jenya777777
    фууух, я тут на линуксойда наткнулся хотел пообщаться) все малину .... испортил )
    skeletor
    а если в html документ поставить <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    а в ldapadd.php такой же хедер?
     
  8. skeletor

    skeletor Активный пользователь

    С нами с:
    5 июн 2010
    Сообщения:
    28
    Симпатии:
    0
    Адрес:
    Kiev
    Попробую.
    в ldapadd.php хедера вообще нет. Он там нужен?
    ПС. Я вообще-то FreeBSD'шник :) Просто аватарка осталась от линукса
     
  9. Padaboo

    Padaboo Старожил
    Команда форума Модератор

    С нами с:
    26 окт 2009
    Сообщения:
    5.242
    Симпатии:
    1
    skeletor
    фриБДСМ) а я линуксойд, с недавних пор)
     
  10. skeletor

    skeletor Активный пользователь

    С нами с:
    5 июн 2010
    Сообщения:
    28
    Симпатии:
    0
    Адрес:
    Kiev
    Так же ругаается. Проблема кроется в строке "cn=$id_cn,$dc". Видимо русские символы неправильно передаются или оно как-то их изменяет.
     
  11. Padaboo

    Padaboo Старожил
    Команда форума Модератор

    С нами с:
    26 окт 2009
    Сообщения:
    5.242
    Симпатии:
    1
  12. skeletor

    skeletor Активный пользователь

    С нами с:
    5 июн 2010
    Сообщения:
    28
    Симпатии:
    0
    Адрес:
    Kiev
    Да, спасибо оно. Пару экспериментов с iconv и заработало. В итоге блок
    Код (Text):
    1.  $id_cn = $_POST['id_cn'];
    2.  $id_sn = $_POST['id_sn'];
    3.  $id_mail = $_POST['id_mail'];
    заменить на такой
    Код (Text):
    1. $id_cn = iconv("utf-8","utf-8",$_POST['id_cn']);
    2. $id_sn = iconv("utf-8","utf-8",$_POST['id_sn']);
    3. $id_mail = iconv("utf-8","utf-8",$_POST['id_mail']);
    Странно, но именно такой вариант заработал. Не могу понять почему.
     
  13. Padaboo

    Padaboo Старожил
    Команда форума Модератор

    С нами с:
    26 окт 2009
    Сообщения:
    5.242
    Симпатии:
    1
  14. skeletor

    skeletor Активный пользователь

    С нами с:
    5 июн 2010
    Сообщения:
    28
    Симпатии:
    0
    Адрес:
    Kiev
    А как это понять? Насколько я понял в UTF-8.