Intereting Posts
Почему функция crypt () PHP возвращает одно и то же для двух разных строк? Прокрутка через вложенный массив для генерации таблиц разной длины Отправка электронной почты с PHP с помощью SMTP и электронной почты идет на спам. Какой будет самый простой способ отправить электронную почту во входящие? Отправить данные POST на PHP без использования HTML-формы? php foreach echo prints «Массив» как значение Fix Access запрещен для пользователя 'root' @ 'localhost' для phpMyAdmin Как PHP-интерфейс с Apache? Является ли использование команд оболочки из плохой практики PHP / CGI? Как объединить два массива путем суммирования объединенных значений ereg_replace против preg_replace Неустранимая ошибка: Class 'Google_Auth_AssertionCredentials' не найден Получить подстроку между двумя символами в javascript Как разделить соединение MySQL между двумя разными PHP-процессами Динамический RewriteBase с опциональным index.php Загрузка файла PHP не принимает файлы zip

PHP взрывает строку с тегами, используя UTF8 между ними

в php я хочу взорвать строку с тегом, используя utf-8 между ними, например, в этом тексте:

$content = "<heading>فهرست اول</heading>hi my name is mahdi whats app <heading>فهرست دوم</heading>how are you"; 

в том, что у меня есть <heading></heading> с utf8 между ними, я хочу иметь простой массив с ними, например:

 $arr[0] = "<heading>فهرست اول</heading>hi my name is mahdi whats app"; $arr[1] = "<heading>فهرست دوم</heading>how are you"; 

строки между <heading></heading> различаются, как я могу создать этот массив? вопрос в том, как я могу взорвать текст <heading>ENY TEXT</heading>

Вы можете использовать preg_split для разделения текста на регулярное выражение, а затем array_filter для удаления пустых строк:

 $arr = array_filter(preg_split('/(?=<heading>.*?<\/heading>)/', $contents), 'strlen'); 

Он не удалит тег, поскольку он находится в режиме look-ahead – групповая конструкция, которая не потребляет то, что она сопоставила.

Например:

 <heading>فهرست اول</heading>hi my name is mahdi whats app <heading>فهرست دوم</heading>how are you 

Это должно возвратиться:

 array( [0] => "<heading>فهرست اول</heading>hi my name is mahdi whats app ", [1] => "<heading>فهرست دوم</heading>how are you" ) 

Вы можете проверить это регулярное выражение онлайн: https://regex101.com/r/ITi7Lh/1
Или, если хотите, посмотрите, как PHP анализирует его: (ссылка, похоже, не работает на SO, вам нужно вручную вставить ее): https://en.functions-online.com/preg_split.html?command={"pattern":"\/(?=<heading>.*?<\\\/heading>)\/","subject":"<heading>\u0641\u0647\u0631\u0633\u062a \u0627\u0648\u0644<\/heading>hi my name is mahdi whats app <heading>\u0641\u0647\u0631\u0633\u062a \u062f\u0648\u0645<\/heading>how are you","limit":-1}

Вы можете использовать strpos и Substr, чтобы сделать то же самое, если ваш UTF вызывает проблемы.

Это будет цикл, пока он больше не сможет найти заголовок, а затем добавит последний Substr после цикла.

https://3v4l.org/UPfbb

 $content = "<heading>فهرست اول</heading>hi my name is mahdi whats app <heading>فهرست دوم</heading>how are you<heading>فهرست اول</heading>hi my name is mahdi whats app2 <heading>فهرست دوم</heading>how are you2"; $oldpos =0; $pos =strpos($content, "<heading>",1); // offset 1 to exclude first heading. While($pos !== false){ $arr[] = Substr($content, $oldpos, $pos-$oldpos); $oldpos = $pos; $pos =strpos($content, "<heading>",$oldpos+1); //offset previous position + 1 to make sure it does not catch the same again } $arr[] = Substr($content, $oldpos); // add last one since it does not have a heading tag after itself. Var_dump($arr); 

Вы можете использовать preg_match или в вашем случае preg_match_all :

 $content = "<heading>فهرست اول</heading>hi my name is mahdi whats app <heading>فهرست دوم</heading>how are you"; preg_match_all("'<heading>.*?<\/heading>'si", $content, $matches); print_r($matches[0]); 

дает:

 Array ( [0] => <heading>فهرست اول</heading> [1] => <heading>فهرست دوم</heading> ) 

Вы можете попробовать следующую функцию, она должна хорошо соответствовать вашим потребностям. В принципе, вы должны разделить массив, используя <heading> как разделитель, и каждый элемент в результирующем массиве будет тем, что вам нужно, но тег заголовка будет удален, так как это то, что вы разделили, поэтому вам нужно добавить его назад. Есть комментарии, объясняющие, что делает код.

 function get_what_mahdi_wants($in_string){ $mahdis_strings_array = array(); // Split string at occurrences of '<heading>' $mahdis_strings = explode('<heading>', $in_string); foreach($mahdis_strings as $mahdis_string){ // if '<heading>' is found at start of string, empty array element will be created. Skip it. if($mahdis_string == ''){ continue; } // Add back string element with '<heading>' tag prepended since exploding on it stripped it. $mahdis_strings_array[] = '<heading>'.$mahdis_string; } return $mahdis_strings_array; }