• 締切済み

PHPで文字の分割

下記のコードで、 「とある魔術 OP とある魔術II ED」 と表示させたいのですが、 私の力では 「とある魔術 OP とある魔術II ED」 とまでしか表示できませんでした。 力を貸してください。 お願いします。 $moji="とある魔術//OP//とある魔術II//ED"; $str = explode( "//", $moji); $count1=count($str); $count2=count($str); for ($i = 0; $i <= $count1-1; $i++) { echo (htmlspecialchars($str[$i])); if($count2=$count2-1){ print("<br>"); } }

みんなの回答

  • yambejp
  • ベストアンサー率51% (3827/7415)
回答No.2

最初の「//」をタブに、2番目の「//」をbrタグ+改行にするのであれば 以下のような感じ、ただし「//」がなく文字列の最後まできてもOKとします <?PHP $str = "とある魔術//OP//とある魔術II//ED"; $pattern="/(.+?)".preg_quote("//")."(.+?)(?:".preg_quote("//")."|$)/"; $replacement="$1\t$2<br>\n"; $str=preg_replace($pattern,$replacement,$str); print $str; ?>

noname#244856
noname#244856
回答No.1

まずエンコーディングについて ・Shift_JIS ・CP932 (Windows標準) ・EUC-JP (UNIX系でたまにある) ・UTF-8 (UTF-8 BOM有り) ・UTF-8N (UTF-8 BOM無し) などいろいろありますが、最後の「UTF-8N」を選択してください。PHPのマルチバイト非対応の関数(strpos, str_replace, explode, trimなどほとんどの文字列操作関数)はUTF-8しか正しく処理することが出来ません。 本題に入りますが $str = 'とある魔術//OP//とある魔術II//ED'; $str = implode("<br />\n", array_map( function ($a) { return implode(' ', $a); }, array_chunk(explode('//', $str), 2) )); echo htmlspecialchars($str, ENT_QUOTES, 'UTF-8'); でどうでしょうか。

関連するQ&A