Как идентифицировать этот знак?

Solomon Kane

Постоялец
Регистрация
26 Авг 2009
Сообщения
144
Реакции
9


Уже все мозги сломал, так как стандартные средства его отлавливать не хотят, в то время как буржуи часто любят писать типа I’ve, we’re и так далее именно с этим знаком. На стандартный ' он совершенно не похож. Ни регулярки, ни стандартные функции поиска его не отлавливают. Может, кто сталкивался?
 
PHP:
$code = ord("’");
header('Content-Type: text/plain;charset=UTF-8');
print "&#$code;";

нету под рукой сервера. пишу как думаю. отпишите результат.
 
PHP:
$txt = 'I`ve';
if (strpos($txt, '`')) echo 'found';
дал found, т.е. нормально нашел
 
Проверил стандартные функции поиска, нормально отлавливается

Rt2x7HO4.gif
 
короче знак как знак, ничего особенного, даже в аски таблице находится, т.е. с юникодом и т.п. не нужно игратся, будет во всех кодировках.
 
может там html код этой кавычки

PHP:
$text = '& #146; или  ’';
echo $text;
echo strpos($text, '’') ? 'да' : 'нет';
echo strpos($text, '& #146;') ? 'да' : 'нет';
убрать пробел между & # проблем парсинга тут

firefox сразу конвертирует коды в символы и в html исходнике показывает уже сами символы
 
Дык в том-то и дело я пробовал всё вышеописанное, не находит. Может, с Денвером что-то не так?

Знак дан как есть, в спецсимвол не переведен.
 
Дык в том-то и дело я пробовал всё вышеописанное, не находит. Может, с Денвером что-то не так?
Знак дан как есть, в спецсимвол не переведен.
Откуда ты берёшь этот символ? Надо из перво источника- если скопируешь в редактор для тестов- может получимтся не то. Ещё- смотри исходный код (иногда там написано то, что нужно).

попробуй ещё
PHP:
’
’
Если уж и это не поможет- пытайся сконвертить буквы строки в html коды- что-то вроде
PHP:
function utf8tohtml($utf8, $encodeTags) {
    $result = '';
    for ($i = 0; $i < strlen($utf8); $i++) {
        $char = $utf8[$i];
        $ascii = ord($char);
        if ($ascii < 128) {
            // one-byte character
            $result .= ($encodeTags) ? htmlentities($char) : $char;
        } else if ($ascii < 192) {
            // non-utf8 character or not a start byte
        } else if ($ascii < 224) {
            // two-byte character
            $result .= htmlentities(substr($utf8, $i, 2), ENT_QUOTES, 'UTF-8');
            $i++;
        } else if ($ascii < 240) {
            // three-byte character
            $ascii1 = ord($utf8[$i+1]);
            $ascii2 = ord($utf8[$i+2]);
            $unicode = (15 & $ascii) * 4096 +
                       (63 & $ascii1) * 64 +
                       (63 & $ascii2);
            $result .= "&#$unicode;";
            $i += 2;
        } else if ($ascii < 248) {
            // four-byte character
            $ascii1 = ord($utf8[$i+1]);
            $ascii2 = ord($utf8[$i+2]);
            $ascii3 = ord($utf8[$i+3]);
            $unicode = (15 & $ascii) * 262144 +
                       (63 & $ascii1) * 4096 +
                       (63 & $ascii2) * 64 +
                       (63 & $ascii3);
            $result .= "&#$unicode;";
            $i += 3;
        }
    }
    return $result;
}
function ascii2entities($string){
    for($i=128;$i<=255;$i++){
        $entity = htmlentities(chr($i), ENT_QUOTES, 'cp1252');
        $temp = substr($entity, 0, 1);
        $temp .= substr($entity, -1, 1);
        if ($temp != '&;'){
            $string = str_replace(chr($i), '', $string);
        }
        else{
            $string = str_replace(chr($i), $entity, $string);
        }
    }
    return $string;
}
В зависимости от кодировки. Они выдадут код типа
is &lt;b&gt;bold&lt;/b&gt;
среди них ищешь код символа. Мож он ненормальный))Если и это не поможет- глянь комменты, там ещё несколько реализаций
Скрытое содержимое доступно для зарегистрированных пользователей!
 
Назад
Сверху