質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
WordPress

WordPressは、PHPで開発されているオープンソースのブログソフトウェアです。データベース管理システムにはMySQLを用いています。フリーのブログソフトウェアの中では最も人気が高く、PHPとHTMLを使って簡単にテンプレートをカスタマイズすることができます。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

Q&A

解決済

1回答

2352閲覧

PHPで文字数制限しつつ、特定のタグを許可する方法

EggBenedict

総合スコア19

WordPress

WordPressは、PHPで開発されているオープンソースのブログソフトウェアです。データベース管理システムにはMySQLを用いています。フリーのブログソフトウェアの中では最も人気が高く、PHPとHTMLを使って簡単にテンプレートをカスタマイズすることができます。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

0グッド

0クリップ

投稿2018/09/28 15:40

###やりたいこと
wordpressで、「10文字制限」と「改行タグ許可」をしたいです。

###やってみたこと
下記のようにすると10文字で制限できます。
しかしこれではタグが全て削除されてしまいます。

php

1<?php 2$content = get_the_content(); 3$content_lim = wp_html_excerpt( $content, 10 ); 4echo $content_limt; 5?>

かといって下記のように改行タグを許可すると、10文字で制限できません。

php

1<?php 2$content = get_the_content(); 3$content_tag = strip_tags( $content, '<br><br />'); 4echo $content_tag; 5?>

どのようにすれば「10文字制限」と「改行タグ許可」ができるでしょうか?

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

EggBenedict

2018/10/03 07:59

なるほど、参考にさせて頂きます。ありがとうございます!
guest

回答1

0

ベストアンサー

改行タグを置換で削除した上で文字数のチェックを行ってはいかがでしょうか。

ただし、今回の要件は難点もあります。
文字数を制限したいということはある程度保管する先のDBにも入れられるデータ量にも制限がある可能性もあります。
除去するにも無視するにしてもいずれにしても改行タグを許可するということは、大量に改行タグを投入されてもそのまま保管するということになります。
どれだけ沢山入れられてもそれ以外の文字数だけがチェックされます。
作りとしてはあまりよろしくないかなと。
まだ「改行コードを保管して表示時に改行タグに置換する」方が良いです。

実際の要件とも照らし合わせつつご検討ください。

投稿2018/09/28 21:26

m.ts10806

総合スコア80850

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

EggBenedict

2018/09/29 05:26

ご意見ありがとうございます。 「改行タグを置換で削除した上で文字数のチェック」というのがよく分かりませんでした。 たとえば<br>をAに置換してA以外の文字数をチェックするならば、5文字の「Apple」が4文字とされてしまうのではないでしょうか。 あと大量の改行タグについてですが、たとえばツイッターでは改行タグは連続入力しても1つしか出力されませんが、仰る点もそのような意味(連続の場合は1つに置換した方がいいよ)でしょうか? お忙しい中申し訳ございませんが、ご意見頂戴できれば幸いです。宜しくお願い致します。
m.ts10806

2018/09/29 05:32

Aに置換ではなく空文字に置換です。「削除」ですからね。 大量の改行タグの対応についてはあくまでシステム上の仕様次第です。2つ以上は全て1つとみなすのか、どこまで受け入れるのか、決めたらその通り対応するだけです。
EggBenedict

2018/09/30 12:05

こんばんは。お世話になっております。 置換のアドバイスを受け、このようなコードにたどり着きました。 <?php $content = get_the_content(); $content = str_replace('<br>', '아', $content); $content = str_replace('<br />', '에', $content); $content_lim = wp_html_excerpt($content, 10); $content_lim = str_replace('아', '<br>', $content); $content_lim = str_replace('에', '<br />', $content); echo $content_lim; ?> しかしどうしても「2つ以上の改行タグを1つにする」という点がわかりません。 どのような書き方になるかご教示願えませんでしょうか。 宜しくお願い致します。
m.ts10806

2018/09/30 12:34

아 에 は韓国語でしょうか・・・。 文字数のチェックをするときだけ普通に空にすればいいだけなのですが。 $content = str_replace(["<br>","<br />"],"",$content ); ※配列にした方が何個も検索文字列指定できるので楽ですよ。 とここまで書いて気になって 調べてみたらwp_html_excerpt()はあくまで指定文字数を切り出してくるだけなんですね。 「制限」とのことなので文字数チェックを行うのかと思っていました。 ではやり方が全く変わってきます。 >「2つ以上の改行タグを1つにする」 wp_html_excerpt()のリファレンスを確認しますと、 https://wpdocs.osdn.jp/%E9%96%A2%E6%95%B0%E3%83%AA%E3%83%95%E3%82%A1%E3%83%AC%E3%83%B3%E3%82%B9/wp_html_excerpt wp_strip_all_tags()と組み合わせれば何とかできそうに思いますが、自身の環境にWordPressが入っていないのですぐすぐの確認はできません。 「1 つ以上の連続する改行または空白(タブを含む)を半角スペース 1 つに置換します。 」とのことなので、brタグを全て改行コードに置換すれば半角スペース1つにしてくれるので、そのあとに半角スペースを改行タグに置換すればいいのではないかなと。 結局ですが、置換用文字列を入れてしまうとそれも1文字とカウントするのであまり意味がありませんし、置換用文字列そのまま入ってこないとも言い切れませんしね。 気になることとしては、「文字数を切り出したい」ということは一覧画面に表示するようなケースが多いかと思いますので、改行をそのまま残すのはいささか違和感があります。 実際の用途は何でしょうか?
EggBenedict

2018/09/30 15:01 編集

たびたびのご返信、ありがとうございます。 >文字数のチェックをするときだけ普通に空にすればいいだけなのですが。 >brタグを全て改行コードに置換すれば半角スペース1つにしてくれるので、そのあとに半角スペースを改行タグに置換すればいいのではないか なるほど。ただ気になったのは、「ハングル」でなく「空(半角スペース)」にするという方法ですと、最終的にそれは改行になるわけですから、普通に入力した半角スペースまで改行になってしまいますよね? そこはどのように対処すべきだと思われますか? あと実際の用途は仰るように一覧画面に表示する感じです。改行はあってもいいかと思っていますが、違和感と仰いますと…?
m.ts10806

2018/09/30 21:48

空は半角スペースではなくてあくまで空です。何もありません。最初から「削除」と言ってるのですがそこを拾ってくれないのはなぜでしょうか・・・。
m.ts10806

2018/09/30 21:53

↑ちょっと途中で送信してしまったので少々お待ちください。
m.ts10806

2018/09/30 22:56

> あと実際の用途は仰るように一覧画面に表示する感じです。改行はあってもいいかと思っていますが、違和感と仰いますと…? 一覧画面はあくまで要約された情報が表示されるものと思います。 改行タグがあってしまうと各行の高さが均一になりませんし、ページングなどしていた場合、ページごとに全体の高さが変わってしまう現象が起きます。 ブログなどもそうですが、一覧では改行を除外して表示しているケースのほうが多いです。 teratailも一覧に内容が表示されていた頃は改行は除外されていました。 そのための「違和感」です。
m.ts10806

2018/09/30 23:07

いずれにしても改行タグだけなのであれば改行コードだけで保存させてnr2br()通すだけで済むので改行タグだけを許可するようにするのはあまりメリットがないように思います。 <br /> ←改行タグ ↑改行コード(テキストエディタでは↲で表記されるもの)
EggBenedict

2018/10/03 08:11

すみませんご返信が遅くなりました。 なるほど最初から「削除」と仰ってますね!すみません…。 そして、 nr2br()通すだけで済む という機能を知りませんでした。そちらで解決できそうです。ありがとうございます。
m.ts10806

2018/10/03 09:14

スペルミスってました。失礼しました。nl2br()です。phpの標準関数 「改行コードをbrタグにする」というもの。 http://php.net/manual/ja/function.nl2br.php brタグだけを許可するなら意味がないのでtextareaに改行こみで打たせてそのまま保存し、改行コードをbrタグに置換すればいいだけです。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問