За последние 24 часа нас посетили 17054 программиста и 1834 робота. Сейчас ищут 1630 программистов ...

Как передать строку с апострофом?

Тема в разделе "PHP для новичков", создана пользователем khrom, 26 дек 2012.

  1. khrom

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

    С нами с:
    21 фев 2011
    Сообщения:
    10
    Симпатии:
    0
    Проблема, которая меня уже задолбала :) И похоже, что дело именно в PHP.
    В общем, ситуация такая.

    На первой странице пользователь вводит в форму, скажем, название города:

    <form action=page2.php method=post enctype=multipart/form-data>
    <input type=text size='20' value='' name=city><p>
    <input type=submit value="Продолжить">
    </form>

    На второй странице название выводится для проверки правильности ввода:

    $city = $_POST['city'];
    echo "Проверьте: $city<p>
    <form action=page3.php method=post enctype=multipart/form-data>
    <input type=hidden value='$city' name=city><p>
    <input type=submit value='Подтвердить'>
    </form>";

    Пользователь проверяет, если находит ошибку - возвращается и исправляет, а если все ок, идет дальше.
    На третьей странице выводится сообщение "Вам отправлено письмо" и название отправляется через функцию mail:

    $city = $_POST['city'];
    echo "Вам отправлено письмо";
    $message = "$city ";
    mail("$email1", '', "$message", "From: $email2\nContent-type: text/html; charset=utf-8");

    Все работает, пока какой-нибудь незалежный львивский хлопец не введет название города на украинском языке: например, Кам'янець-Подільський (естественно, используя при этом апостроф из английской раскладки). В результате, что интересно, на второй странице (то есть пока передача идет через html, а РНР не задействуется) название выводится правильно, а вот на третьей (и в письме тоже) обрезается по апострофу: Кам
    И все.
    Пожалуйста, подскажите: что делать, куда бежать??? :)
     
  2. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    вывод html надо экранировать htmlspasialchars функцией, ибо вместо города могут вписать че по-круче
     
  3. khrom

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

    С нами с:
    21 фев 2011
    Сообщения:
    10
    Симпатии:
    0
    Вывод у меня экранировался strip_tags, я просто упрощенно код написал в вопросе. А вот htmlspasialchars в самом деле помогло, спасибо!