Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > PHP: Общие вопросы > Как отловить в строке символ Unicode


Автор: korob2001 28.5.2006, 18:41
Привет!
Мне нужно отловить в строке, с помощью шаблона символы Unicode, например: êëéè. При этом мне желательно не указывать их явно, так как файл приходится переводить в кодировку UTF-8, что порождает другие проблемы. ;(((( Как в PHP указать код символа Unicode в шаблоне, например в Perl, что бы отловить эти символы, можно написать такой шаблон:
/\xEA\xEB\xE9\xE8/ попробовал, так же и в PHP, т.е.:
Код
if (!eregi('[A-Za-z\xEA\xEB\xE9\xE8\s-]+', $_POST["mess"])) {
        $message = "Message is not valid";
        return;
}

Но что-то это не заработало. ;(((
Искал в книге "Разработка Web-приложений с помощью PHP и MySQL" (Люк Веллинг, Лора Томсон), но там ничего о unicode не нашёл. 

Автор: -=Ustas=- 29.5.2006, 08:57
Скорее всего тебе нужно смотреть в сторону функций мультибайтных строк. Но там надо PHP компилить с поддержкой этих функций. 

Автор: korob2001 30.5.2006, 10:12
Да не знаю, вообще PHP воспринимает символы Unicode, значит и шаблон их должен находить. Вот пример как такой код вывести в строку.
Код
<html>
<head>
    <title>Test</title>
    <META http-equiv=Content-Type content="text/html; charset=latin1">
</head>
<body>
    <?php
        echo "Hallo van Belgi\xEB!";
    ?>
</body>
</html>

На выходе получишь строку: Hallo van België (Привет из Бельгии!) на нидерландском языке. Ладно, сейчас ещё поищу в сети.  

Автор: -=Ustas=- 30.5.2006, 10:41
korob2001, так подожди, работает ведь все:
Код

<?php

$string =  "Hallo van Belgi\xEB!";
echo $string.'<hr>';

if (preg_match("#\\xEB#is", $string)) {
    echo 'Найден!';
} else {
    echo 'Не найден!';
}

?>


Или я тебя неправильно понял?! 

Автор: korob2001 30.5.2006, 10:54
 smile Да, похоже я сам запарился. Проблема в кавычках, нужны были двойные, для интерполяции специальных символов. В моём варианте выражение искало последовательность \xEB,а не символ ë. Но я ещё не пробовал, чуть позже попробую и напишу о результате, так как юзер будет вводить символ ë, а не код этого символа. 

Автор: korob2001 30.5.2006, 11:30
Вот так то, что нужно. Всё заработало.  smile 
Код

<html>
    <head>
    <META http-equiv=Content-Type content="text/html; charset=latin1">
    <title>Test</title>
    </head>
    <body>
    <?php if (!isset($_POST['send'])) { ?>
        <form method="POST">
        <input type="text" name="country" size="30"/>
        <input type="submit" value="Send" name="send"/>
    <?php } else {
            if (preg_match("#\xEB#is", $_POST['country'])) {
                 echo 'Yes!';
            } else {
                 echo 'No!';
            }
            echo "<hr/><b>Your country is: " . $_POST['country'] . "</b>";
          }
    ?>
    </body>
</html>

Попробуй скопировать и вставить следующую строку:
België 

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)