提取某些unicode字符串所在的元素

时间:2013-10-22 22:38:50

标签: php unicode

好的,我已经对这些问题进行了一些搜索。我找不到任何解决方案。 这就是事情。我有一些带有Unicode文本的段落。我想从特定字符串中提取所有字符,其中存在某些字符串。

$paragraphs = "<p>ареги: сейчас на Десятую, Международную, Конференцию, по</p>
       <p>которая состоится: 10-12 марта 1997 года в Майнце в Германии</p>
       <p>Конференция соберет: широкий круг экспертов по  вопросам глобального</p>
       <p>Интернета: и Unicode, локализации и интернационализации, воплощению</p>
       <p>жениях: шрифтах, верстке и многоязычных компьютерных системах</p>";

让我们说我想要包含Unicode字符串ареги:的段落内容,您可以在第一段中看到。

在这种情况下,我的结果应该是

ареги: сейчас на Десятую, Международную, Конференцию, по

我更喜欢PHP。

2 个答案:

答案 0 :(得分:1)

您尚未指定段落的数据源位置,因此这是使用预定义数组(例如)实现此目的的一种方法:

<?php

// Data Source
$paragraphs = array(
    '<p>ареги: сейчас на Десятую, Международную, Конференцию, по</p>',
    '<p>которая состоится: 10-12 марта 1997 года в Майнце в Германии</p>',
    '<p>Конференция соберет: широкий круг экспертов по  вопросам глобального</p>',
    '<p>Интернета: и Unicode, локализации и интернационализации, воплощению</p>',
    '<p>жениях: шрифтах, верстке и многоязычных компьютерных системах</p>'
);

// Search Function
function search($term, $paragraphs = array()) {
    foreach ($paragraphs as $paragraph) {
        if (preg_match('/'. $term .'/', $paragraph)) {
            return $paragraph;
        }
    }
    return '';
}

// Usage
echo search('ареги', $paragraphs);

?>

编辑v2: 如果数据源是一行html段落,则以上是上述的替代版本:

<?php

// Data Source
$paragraphs = '<p>ареги: сейчас на Десятую, Международную, Конференцию, по</p>
   <p>которая состоится: 10-12 марта 1997 года в Майнце в Германии</p>
   <p>Конференция соберет: широкий круг экспертов по  вопросам глобального</p>
   <p>Интернета: и Unicode, локализации и интернационализации, воплощению</p>
   <p>жениях: шрифтах, верстке и многоязычных компьютерных системах</p>';

// Search Function
function search($term, $paragraphs) {
    $paragraphs = preg_replace('!\s+!', ' ', $paragraphs);
    $paragraphs = explode('</p> <p>', $paragraphs);
    array_walk_recursive($paragraphs, function(&$para) {
        $para = trim($para);
        $para = str_replace(array('<p>', '</p>'), '', $para);
    });
    foreach ($paragraphs as $paragraph) {
        if (preg_match('/'. $term .'/', $paragraph)) {
            return $paragraph;
        }
    }
    return '';
}

// Usage
echo search('ареги', $paragraphs);

?>

答案 1 :(得分:0)

您可以使用strpos()mb_strpos()

如果它对您不起作用,那么您必须确保您的输入是unicode。

小例子:

$paragraphs = '
    <p>ареги: сейчас на Десятую, Международную, Конференцию, по</p>
    <p>которая состоится: 10-12 марта 1997 года в Майнце в Германии</p>
    <p>Конференция соберет: широкий круг экспертов по  вопросам глобального</p>
    <p>Интернета: и Unicode, локализации и интернационализации, воплощению</p>
    <p>жениях: шрифтах, верстке и многоязычных компьютерных системах</p>
';

$pos = strpos( $paragraphs, 'ареги' );

if( $pos === false )
    echo 'not found';
else
    echo 'found';