2017-02-15 14 views
0

Я пытаюсь извлечь весь текст ссылки и hrefs из строки HTML, но исходная строка - Unicode, а nodeValue, похоже, не справляется с этим?PHP: Unicode nodeValue?

$links = array(); 
$titles = array(); 

$dom = new DOMDocument(); 
$dom->loadHTML($str); 
$hrefs = $dom->getElementsByTagName("a"); 
foreach ($hrefs as $href) { 
    $links[] = $href->getAttribute("href"); 
    $titles[] = $href->nodeValue; 
} 

Моя исходная строка выглядит следующим образом:

<p><a href='uploads/root/tr_62.pdf'>Türkiye</a></p> 

Но мой выход за $ названия [0] выглядит следующим образом:

Türkiye 

Как я могу сделать nodeValue уважать символы Unicode ?

Спасибо, что посмотрели!

+0

При добавлении 'Header ("Content-тип: текст/html; кодировка = UTF-8");' к вашему сценарию (перед первым выходом), устраняет проблему? –

+0

У меня есть полный заголовок HTML на странице, и т. Д. –

+0

' DOMDocument' и все функции XML по умолчанию для UTF-8, чтобы они могли обрабатывать Unicode просто отлично. Из вашего вывода это приложение, которое использует либо однобайтную кодировку, отличную от Юникода, либо не может объявить ее кодировку (тег '' в основном не имеет значения, то, что считается HTTP-заголовками и, конечно, фактическим содержимым). /// Оставьте ваш код PHP отдельно. Если вы копируете и вставляете статический '車', правильно ли он печатается? –

ответ

1

Вы много с помощью mb_convert_encoding

$dom = new DOMDocument(); 
$html_data = mb_convert_encoding($str , 'HTML-ENTITIES', 'UTF-8'); 
$dom->loadHTML($html_data ); 
$hrefs = $dom->getElementsByTagName("a"); 
foreach ($hrefs as $href) { 
    $links[] = $href->getAttribute("href"); 
    $titles[] = $href->nodeValue; 
} 
+0

Это обходное решение, которое ни в коем случае не должно быть необходимо в приложении с поддержкой UTF-8. Он просто маскирует неправильную конфигурацию кодирования. –

0

Спасибо, комментарий пользователя Veve ответил на мой вопрос.

Следующая строка решает мою проблему:

$str = mb_convert_encoding($str, 'html-entities', 'utf-8'); 
+0

Это копия ответа Даниэля, и она не «решает» проблему, она скрывает ее, конвертируя все в 7-разрядный US-ASCII. –

+0

Не совсем верно, это копия ответа, связанного с комментарием Веви, который мы с Дэниэлом повторно опубликовали. Я не видел ответа Дэниелса до тех пор, пока я не отправил свой. –

+0

Достаточно честный. Во всяком случае, идея закрытия вопросов как точного дубликата не имеет той же информации, что и везде (как это произошло). Как бы то ни было, я не думаю, что вопрос на самом деле тот же. Я считаю, что приложение может просто не поддерживать UTF-8. –