2012-01-02 3 views
4

Я хотел бы подсчитать длину строки с PHP. Строка содержит номера сущностей HTML, которые накапливают количество символов, которые подсчитываются: тире –, который считается 7, когда я только хочу, чтобы он считался равным 1.Подсчет длины строки с HTML-пронумерованными объектами в PHP

Как преобразовать объекты с нумерованными html в форма, где специальные символы учитываются только длиной 1?

Пример строки:

Goth-Trad – ‘Cosmos’ 

Код:

$string = html_entity_decode('Goth-Trad – ‘Cosmos’'); 
    echo strlen($string); 

производит '38', когда я ищу '20'. Что происходит не так?

+0

Даже если вы использовали 'htmlentities' тег, вы не видите * См. Также * часть http://php.net/htmlentities –

+1

К сожалению, документация не предоставила мне результат, который я искал, поэтому я размещаю вопрос на SO. Я был бы признателен, если вы не сразу опуститесь без знания фона вопроса. – Squrler

ответ

3

Вы можете использовать это:

$html = 'Goth-Trad – ‘Cosmos’'; 
echo strlen(utf8_decode(html_entity_decode($html, ENT_COMPAT, 'utf-8'))); 
+0

Тот же комментарий, что и раньше, к сожалению: этот код производит 38, когда ему должно быть 20. Любая идея, что может пойти не так? – Squrler

+0

Я отредактировал свой ответ, и теперь он работает нормально. –

+0

Удивительный! Работает как шарм. – Squrler

3

Просто декодируйте его и считайте декодированным?

$string = html_entity_decode("Goth-Trad – ‘Cosmos’",ENT_QUOTES,"UTF-8"); 
echo strlen($string); 
+0

К сожалению, этот точный фрагмент кода все еще производит 38, когда ему должно быть 20. Любая идея, что может пойти не так? – Squrler

+0

@Squrler вы правы, я просто попробовал, и функция php не может декодировать объекты. Однако код правильный. Я исследую вопрос –

+0

@Damien, спасибо! Питер ниже только что обновил свой ответ, который дает результаты, которые я искал. Еще раз спасибо за ответ! – Squrler

-1

Пожалуйста, попробуйте с функцией следующего кодирования:

<?php 

$string='Goth-Trad &#8211; &#8216;Cosmos&#8217;'; 

echo html_entity_text_length($string); // Calling the function 

//html_entity_text_length function start 

function html_entity_text_length($string){ 
    preg_match_all("/&(.*)\;/U", $string, $pat_array); 
    $additional=0; 
    foreach ($pat_array[0] as $key => $value) { 
     $additional += (strlen($value)-1); 
    } 

    $limit+=$additional; 
    return strlen($string)-$limit; 
} 

//html_entity_text_length function end 

?> 
+0

обновление ответ. not clerify – user1972007

+0

Это свалка кода .. можете ли вы превратить это в правильный ответ? Если нет, скорее всего, он будет удален. Посмотрите другие ответы на другие вопросы. –

+0

Привет, друзья, пожалуйста, уточните с новым кодированием ... –

Смежные вопросы