2016-05-30 4 views
3

У меня есть строка, как это: Suède · SlovénieExplode особым характером ·

Мне нужно, чтобы взорвать его · я попробовал различные решения, как:

preg_split("/[?·]/",strip_tags($single->children(2)->outertext)) 

explode(chr(149), strip_tags($single->children(2)->outertext)); 

explode(utf8_encode('·'),strip_tags($single->children(2)->outertext)); 

explode('·',strip_tags($single->children(2)->outertext)); 

Но ни одно из решений не работает для меня! может кто-нибудь, пожалуйста, дайте мне знать?

+0

шляпа charset вы используете? 'è' в Utf-8 - это два байта (0xC3, 0xA8),' explode() ', как и другие строковые функции PHP, работает на базе байтов – johannes

+0

Preg_split space dot space? Я имею в виду точку, как в любом char – Andreas

+0

Я думаю, что вы можете научить функцию 'preg_ *' правильно работать с строками Unicode (я предполагаю UTF-8) с помощью флага 'u', поэтому' preg_split ('/? ·]/u ', ..) 'тоже мог бы справиться с этой задачей. Тем не менее, предложение Марцина использовать 'mb_split()' намного лучше, потому что оно более выразительно. –

ответ

3

Вы должны лучше использовать mb_split():

var_dump(mb_split('·', 'Suède · Slovénie')); 

дает

array(2) { 
    [0]=> 
    string(7) "Suède " 
    [1]=> 
    string(10) " Slovénie" 
} 
+0

«·» может быть лучше, сохранить итерацию обрезки – strangeqargo

0

Это похоже на работу по данной строке, но, возможно, не на все ваши строки.

preg_split("/\b (\W+) \b/", $str); 
0

Ваш файл использует Utf-8 скорее всего. В Utf-8 · состоит из двух байтов (0xC2, 0xB7), такое выражение, как "/[?·]/", будет разбиваться на любой из этих байтов. Вместо этого вы должны использовать модификатор u использовать UTF-8 режим:

$ php -r 'print_r(preg_split("/[?·]/u", "Suède·Slovénie"));' 
Array 
(
    [0] => Suède 
    [1] => Slovénie 
) 

Даже лучше использует mb_split() многобайтовый знают функцию расщепления, но это не всегда доступно.

0

кажется, что вы используете simplehtmldom и это не кодирующая символы правильно, используйте str_get_html следующим образом:

//mb_convert_encoding will try to detect the `$html` encoding and convert it to `UTF-8` 
$html = str_get_html(mb_convert_encoding(file_get_contents("http://somesite.com"), 'auto', 'UTF-8')); 

то, вы можете просто использовать:

explode('·',strip_tags($single->children(2)->outertext)); 
0

Я нашел решение, · = · и нам нужно просто поместить это htmlentity.

explode('·',$str); 
Смежные вопросы