dポイントプレゼントキャンペーン実施中!

<?php
$page = 'あいうえお<title>https://www.yahoo.co.jp/</title>かきくけこ';
$page = htmlentities(stristr($page, '<title>'), ENT_QUOTES, 'UTF-8');
echo"$page";
?>


すいません、phpを勉強中で文字を抜き出したりの挙動を確認してたのですが、自分のやりたいことはhtmlのソースからボタン一つでリンクやら画像やらを自動的に収集できるサイトです。しかしphpで文字を扱う場合、特殊文字が原則扱えない事に気が付きました。
これって不便すぎませんか・・?
※「<」とか

一応ここで htmlentitiesで囲めばstristr関数では扱えるという事を教えてもらってこの関数だけは特殊文字が使える事が分かったのですが、ネットにある解説サイトを見てもまったくこの事に触れてるサイトはありません。

最近は食べ物の事でも、プログラムの事でも政治でもなんでも広告サイトばっかりです。初心者サイトを名乗るんだったら最初にこれに触れろよ・・って感じです。結局全部のパターンを試して、あらゆるサイトを確認して・・何時間も無駄になりました。(できないって事を確認することが一番時間がかかります)

htmlentitiesとstristrの同時使用なんてネットのどこを探してもありませんし、分かるわけないです。(そもそもなんで扱えないんだよ・・プログラムって意味不明な制約が多すぎ、ハッキリ言えば何ができるかより、何ができないかを羅列して書いておいて欲しい)

話はめっちゃ逸れますが、最近は食べ物の事でもプログラムの事でも病気の事でも、何調べてもコピペサイトの広告サイトばっかりです。検索がコピペサイトで溢れかえっています。もう昔のような個人の有用なサイトは発見できなくなりました。

もう調べるのに疲れましたので取り急ぎ下記の関数は特殊文字が扱えるのかどうかを教えてください。
もし使えるならhtmlentitiesをどのように記載すれば良いかも教えてもらえると助かります。

ちなみに$page2=htmlentities(explode(",", $str));みたいに()で囲んでみても<とかは使えませんでした。自分はhtmlソースを色々弄りたいので特殊文字を抜き取ったりできないとすごく困ります・・。




$colors = explode(",", $str);
echo substr('ABCDE', 0, 3);
echo stripos('PHP入門 index.html', 'h');
echo str_pad($str, 8);

A 回答 (2件)

とりあえず質問文の関数をpaiza.ioで実行した例。

&や<を問題なく扱えてるのが分かるかと。回答No.1の参考として。

https://paiza.io/projects/e/IkdUBXnaKIRFkk_3oaTIog

□コード
<?php
$page = 'あいうえお<title>https://www.yahoo.co.jp/</title>かきくけこ';
$pag2 = stristr( $page, '<title>' );

$str = '<R,G,B>';
$colors = explode( ",", $str );

echo $page.PHP_EOL;
echo $pag2.PHP_EOL;

echo substr( 'A<BCDE', 0, 3 ).PHP_EOL;
echo stripos( 'PHP入門 & index.html', 'h' ).PHP_EOL;
echo stripos( 'PHP入門 & index.html', 'i' ).PHP_EOL;
echo '|'.str_pad( $str, 8 ).'|'.PHP_EOL;

echo var_dump( $colors );
?>
「phpで文字列の抜き取りなどをする場合、」の回答画像2
    • good
    • 0

よくわかりませんが「特殊文字が使えない」とは、


"<", ">", "&" を Web ブラウザ上で表示できない、
という意味でよろしいでしょうか。

それならば、表示方法を間違えているだけです。
htmlentities は、文章を「編集する処理」ではなく「表示する処理」に絡めましょう。

$page = 特殊文字を含む文章を返すexplodeやstr系の処理();
echo htmlentities($page, ENT_QUOTES, 'UTF-8');

いちいち htmlentities と指定するのも面倒なので、
実用的には専用関数を用意します。

// 特殊文字をブラウザ上で表示できるようにエスケープ
function h($s) {
_ return htmlentities($page, ENT_QUOTES, 'UTF-8');
}
function hout($s) {
_ echo h($s);
}
...
$page = 特殊文字を含む文章を返すexplodeやstr系の処理();
echo h($page); // echo 時は h を「必ず」付ける
hout($page); // いっそのこと echo 無しにするのも手

参考) 有名フレームワークによる実装例
https://api.cakephp.org/3.8/function-h.html
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!