I am working on Japanese language web site, and using this code for words limit, it is working when I paste English sentence but not working with Japanese words .
function content($num) {
$theContent = get_the_content();
$output = preg_replace('/<img[^>]+./','', $theContent);
$output = preg_replace( '/<blockquote>.*<\/blockquote>/', '', $output );
$output = preg_replace( '|\[(.+?)\](.+?\[/\\1\])?|s', '', $output );
$limit = $num+1;
$content = explode(' ', $output, $limit);
array_pop($content);
$content = implode(" ",$content)."...";
echo $content;
}
<?php content('15'); ?>
Can any body help me, and one thing is that I am using xeory_extension
theme.
The problem is that Japanese characters are multibyte (Hiragana and Katakana characters are stored on 3 bytes in UTF-8), so you'll have to use special php multibytes string functions to manipulate strings that contains Japanese characters.
Sadly PHP doesn't provide a mb_explode
function out of the box. Though some people worked on that, using mb_strlen
and mb_substr
to build up that missing function.
The following code is note mine, it comes from the fetus-hina mb_explode gist:
function mb_explode($delimiter, $string, $limit = -1, $encoding = 'auto') {
if(!is_array($delimiter)) {
$delimiter = array($delimiter);
}
if(strtolower($encoding) === 'auto') {
$encoding = mb_internal_encoding();
}
if(is_array($string) || $string instanceof Traversable) {
$result = array();
foreach($string as $key => $val) {
$result[$key] = mb_explode($delimiter, $val, $limit, $encoding);
}
return $result;
}
$result = array();
$currentpos = 0;
$string_length = mb_strlen($string, $encoding);
while($limit < 0 || count($result) < $limit) {
$minpos = $string_length;
$delim_index = null;
foreach($delimiter as $index => $delim) {
if(($findpos = mb_strpos($string, $delim, $currentpos, $encoding)) !== false) {
if($findpos < $minpos) {
$minpos = $findpos;
$delim_index = $index;
}
}
}
$result[] = mb_substr($string, $currentpos, $minpos - $currentpos, $encoding);
if($delim_index === null) {
break;
}
$currentpos = $minpos + mb_strlen($delimiter[$delim_index], $encoding);
}
return $result;
}
Then just use it the same way you use explode:
$content = mb_explode(' ', $output, $limit);
And for implode
, you shouldn't have any issue.