php - 在引号括起来的两个点之间获取字符数

时间:2013-10-04 06:30:13

标签: php

好的,这很奇怪,但我需要它

我正在尝试在一些特定引号之间获取大量代码的字符数。“基本上我需要能够在开头的第3个引号和结尾的第5个引号之间获取所有内容。

所以这是一个例子

a:2:{s:10:"categories";s:5758:"...........";s:5:"posts";s:6:"a:0:{}";}

我需要知道所有时期的字符数。实际上有代码代替那些时期。

因为有11个句点,所以我的字符数将是11.唯一一致的是这里的引号所以我需要根据它。

任何帮助都会很棒。

这是我的代码。我基本上是在创建代码并添加一些自定义标签。在我反序列化之前,我尝试先将代码序列化,但这似乎不起作用。

<?
$thisisit .= 'a:2:{s:10:"categories";s:5481:"a:40:{';
include('connect.php');

$sql = "SELECT * FROM wp_terms ORDER BY term_id ASC LIMIT 40"; 
$result = mysql_query($sql);
$count = 0;
while($row = mysql_fetch_array($result)) {
    $name = $row['name'];
    $charactercount = strlen($name);
    $term_id = $row['term_id'];
    $thisisit .= 'i:'.$count.';a:2:{s:11:"filter_name";s:20:"add_keyword_category";s:11:"filter_args";a:7:{s:12:"filter_value";s:'.$charactercount.':"'.strtolower($name).'";s:19:"filter_search_title";s:1:"1";s:21:"filter_search_excerpt";i:0;s:21:"filter_search_content";s:1:"1";s:21:"faf_filter_categories";a:1:{i:4;s:3:"'.$term_id.'";}s:17:"filter_match_word";i:0;s:17:"filter_match_case";i:0;}}';
    //echo "<br><br>";
    $count++;
}
$thisisit .= '}";s:5:"posts";s:6:"a:0:{}";}';

$array = unserialize($thisisit);
echo strlen($array['categories']);
?>

1 个答案:

答案 0 :(得分:2)

实际上这些数据看起来是序列化的。正确的解决方案是使用php函数unserialize

然后,根据您的结构,知道该元素的长度:

strlen(unserialize($data)['categories']);

如果你运行旧的php,你需要将结果存储在一个临时变量中:

$array = unserialize($data);
echo strlen($array['categories']);

如果您的序列化数据已损坏(如“未正确执行serialize”),正如您的示例所示,我们可以返回原始任务:< / p>

  

在开头的第3个引号和结尾的第5个引号之间获取所有内容

实现这一目标的最简单方法是:

implode("'", array_slice(explode("'", $data), 3, -5));