Распознать «§» с помощью php

у меня есть строка, и я хочу преобразовать их в массив, используя символ «§»:

<?php
$string="element1§element2§element3";
$array=explode("&sect;",$string); //tried also &#167; and §,double and single quotes
print_r($array);
?>

Вывод всегда такой:

Array ( [0] =>element1§element2§element3)

Как я могу позволить php распознать символ «§», чтобы разбить строку на массив?

РЕДАКТИРОВАТЬ: я получаю строку из файла, используя функцию file() и перебирая массив через foreach. Если я использую свой собственный пример, он работает, а с внешним файлом - нет.

rowurlencode() моей строки выглядит следующим образом:

element1%A7element2%A7element3


person Anthony Stark Pirrone    schedule 03.04.2013    source источник
comment
Почему вы используете литеральный символ в строке 2, а версию, закодированную амперсандом, в строке 3? Придерживайтесь одного формата.   -  person Julian H. Lam    schedule 03.04.2013
comment
Я попробовал именно ваш код с § и получил: Array ( [0] => element1 [1] => element2 [2] => element3 ) ; вот он: ‹?php $string=element1§element2§element3; $массив=взорваться(§,$строка); print_r ($ массив); ?›   -  person Royal Bg    schedule 03.04.2013
comment
уже пробовал, $string - это просто пример, я уже отформатировал его из другого источника, но как экранированные символы, так и буквальный символ не решают вопрос   -  person Anthony Stark Pirrone    schedule 03.04.2013
comment
вот почему вы всегда должны задавать настоящий вопрос. какой смысл спрашивать с примером строки, которая явно работает? Вы должны предоставить настоящую строку, с которой у вас возникла проблема   -  person Your Common Sense    schedule 03.04.2013
comment
Вы правы, я не думал, что это должно быть так актуально, мой плохой.   -  person Anthony Stark Pirrone    schedule 03.04.2013
comment
rawurlencode() ваша фактическая строка и добавьте ее к вопросу   -  person Your Common Sense    schedule 03.04.2013


Ответы (4)


rawurlencode вашу строку, чтобы увидеть фактический код этого символа.

затем используйте этот код в качестве разделителя

$array=explode("\xA7",$string);
person Your Common Sense    schedule 03.04.2013

Отлично работает для меня

ini_set('default.charset', 'UTF-8');
header('Content-type: text/html;charset=UTF8');

$string="element1§element2§element3";
$array=explode("§",$string);

print_r($array); //Array ( [0] => element1 [1] => element2 [2] => element3 ) 
person Yang    schedule 03.04.2013
comment
если я установил ini_set() и header(), он больше не будет получать §, но заменю его на � Я получаю строку из файла, используя функцию file() и перебирая массив через foreach. Если я использую свой собственный пример, он работает, но с внешним файлом нет. - person Anthony Stark Pirrone; 03.04.2013
comment
У меня была точно такая же проблема, как у вас. Поэтому, если вы хотите загрузить данные из внешнего файла, вам необходимо убедиться, что файл находится в UTF-8 without BOM. Например, Notepad++ делает это. Проблема в кодировке.. - person Yang; 03.04.2013

Если вы буквально использовали:

<?php
  $string="element1§element2§element3";
  $array=explode("§",$string);
  print_r($array);
?>

Это сработает. Я предполагаю, что в вашем случае $string происходит из другого источника и не находится в той же кодировке символов, что и ваш файл PHP.

person Evert    schedule 03.04.2013

Я нахожу ответ благодаря Твоему Здравому смыслу. Просто я изменяю свою функцию взрыва() следующим образом:

$array=explode("%A7",rawurlencode($string));

Где «%A7» — это rawurlencode «§».

person Anthony Stark Pirrone    schedule 03.04.2013