こんにちは。
今、ホームページで下記のようにPHPを使っています。
mb_encode_numericentity("内容ないようナイヨウ", array(0, 0x10FFFF, 0, 0x10FFFF), 'UTF-8'));
ただこれだと、例えば下記にした場合は<p class="className">と</p>までも変換されてしまいます。
mb_encode_numericentity("内容ないよう<p class=\"className\">ナイヨウ</p>", array(0, 0x10FFFF, 0, 0x10FFFF), 'UTF-8'));
これをどうにかされられないかとmb_encode_numericentityの第二引数を考えているのですが分かりません。用は開くタグと閉じるタグだけはそのままにしたいのです。
そのような高級なことは可能でしょうか?
お知恵をお貸し下さい。
No.2ベストアンサー
- 回答日時:
つかっている$convmapと$encodingが一緒なので、まとめたほうがよいかも
function test3($str)
{
$convmap=array(0, 0x10FFFF, 0, 0x10FFFF);
$encoding="UTF-8";
$pattern="/<.*?>|[\r\n]+/";
if(preg_match_all($pattern,$str,$matches)){
$datas=preg_split($pattern,$str);
array_walk($datas,function (&$item) use($convmap,$encoding){$item=mb_encode_numericentity($item, $convmap, $encoding);});
$str2=implode("%s",$datas);
$str2=vsprintf($str2,$matches[0]);
}else{
$str2=mb_encode_numericentity($str, $convmap, $encoding);
}
return $str2;
}
じっさいのところ、preg_replace_callback()でやる方が簡単にできそうなのですが
ちょっと書き方がめんどくさそうなのでご提示の処理になっています。
yambejpさん、再度のご回答ありがとうございます。
preg_replace_callback()関数ですか…難しそうですね。ちょっと試してみたいと思います。ご提示の方法なんて思いも付きませんでしたし、思いついたとしても出来ませんでした。
本当にありがとうございました。
No.1
- 回答日時:
正しいやり方があるかどうかわかりませんが、
無理やりならこんな感じでもいけるのでは?
(1)タグで分割→タグはとっておく
(2)配列の各要素をエンコードする
(3)配列をセパレータを%sで文字列にもどす
(4)printf処理
<?PHP
$str="内容ないよう<p class=\"className\">ナイヨウ</p>";
$pattern="/<.*?>/";
if(preg_match_all($pattern,$str,$matches)){
$datas=preg_split($pattern,$str);
$convmap=array(0, 0x10FFFF, 0, 0x10FFFF);
$encoding="UTF-8";
array_walk($datas,function (&$item) use($convmap,$encoding){$item=mb_encode_numericentity($item, $convmap, $encoding);});
$str=implode("%s",$datas);
$str=vsprintf($str,$matches[0]);
}
print $str;
?>
yambejpさんありがとうございます。
ご提示の方法、試してみました。出来ました!ただタグが文字列に無かった場合は反映されなかったので、下記のようにyambejpさんの方法と私がタグを用いてない時にやっていた方法に分けてみたのですが、まずご覧下さい。
<?php
function test3($str){
$pattern="/<.*?>/";
if(preg_match_all($pattern,$str,$matches)){
$datas=preg_split($pattern,$str);
$convmap=array(0, 0x10FFFF, 0, 0x10FFFF);
$encoding="UTF-8";
array_walk($datas,function (&$item) use($convmap,$encoding){$item=mb_encode_numericentity($item, $convmap, $encoding);});
$str=implode("%s",$datas);
$str=vsprintf($str,$matches[0]);
print $str;
}else{//このelseが私がやっていた方法です。
echo str_replace("amp;", "", mb_encode_numericentity("$str", array(0, 0x10FFFF, 0, 0x10FFFF), 'UTF-8'));
}
}
?>
私のサイトはhtml内に下記のように一文一文表記しているスタイルです。
------------------
<?php test3("内容ないよう<p class=\"className\">ナイヨウ</p>");?>
<?php test3("内容ないよう");?>
~~~
<?php test3("スーパー内容スーパーないよう<p class=\"className\">ナイヨウ</p>");?>
------------------
こんな風にした場合、外部ファイルにtest3関数を表記する場合のウェブパフォーマンスとしてどのように思われますでしょうか?
もし良いスタイルがありましたら御教示願えないでしょうか?
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- WordPress(ワードプレス) ワードプレスで、投稿一覧ページにタグを表示する方法 投稿につけたタグを、記事一覧ページにもカテゴリと 1 2023/05/10 21:41
- PHP PHPの構文で間違えが分からない 5 2022/07/11 16:38
- HTML・CSS htmltとcssのコードで 1 2022/11/26 13:37
- HTML・CSS HTMLタグのあるCSVファイルを利用する方法 4 2023/03/19 14:41
- ノートパソコン 古いノートパソコンVostro 3500の電源アダプターについて 3 2022/10/07 13:58
- PHP SQLとPHPの連結方法がわからないのでアドバイスお願い致します 1 2022/07/12 12:16
- PHP PHPの変わった閉じタグの必要性と意味を教えてください。 1 2022/08/28 15:15
- PHP PHP・Wordpress preg_replaceを条件分岐で処理させる方法が知りたい 1 2023/05/01 14:25
- PHP ランキングを表示する際の画像の大きさを固定することは可能でしょうか? <?php if ( has_ 1 2022/07/21 14:55
- PHP phpのメールフォームの完了画面でメール受信のコードを書いています。 1 2023/05/31 11:39
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
特定の文からメールアドレスの...
-
読み(あ行~わ行)ごとに分け...
-
CArrayの要素としてCStringArra...
-
verilogで、配列の一部をタスク...
-
STLのvectorで作った配列をメン...
-
ネットショップシステムでカー...
-
php で1から100までの素数の表...
-
配列の添え字が小数だとどうなる?
-
PHPとMySQLで100万件のデータを...
-
濁点のソート
-
C言語 最大値と最小値を求めて...
-
プログラミングのPythonのnoteb...
-
スカラーのベクトル微分
-
Texでの数式
-
配列 一部除外してソート?
-
日付、時間の2段階でソート
-
別ファイルの構造体の値を読み...
-
foreachのなかで次のキーを参照...
-
プルダウンメニューにDBの内容...
-
行数が30万件ほどあるCSVから、...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
スカラーのベクトル微分
-
特定の文からメールアドレスの...
-
読み(あ行~わ行)ごとに分け...
-
ファイルの書き込みについて教...
-
php で1から100までの素数の表...
-
C言語の配列をPush(追加)する...
-
配列の要素(value)に、変数を...
-
STLのvectorで作った配列をメン...
-
C言語 最大値と最小値を求めて...
-
行列
-
verilogで、配列の一部をタスク...
-
CArrayのソート
-
PHPのセレクトボックスの初期値...
-
Perlで重複行を削除したい
-
pythonのnumpyでの繰り返しでの...
-
System.String.Splitでエラー
-
連想配列から<th>を含むテーブ...
-
2次元配列CSVのソート
-
【PHP】配列のキー名の修正は可...
-
Pager::factory()の使い方がわ...
おすすめ情報
yambejpさん、早速のご返事ありがとうございます。
試してみたいと思います。まずはお礼まで。