Я пытаюсь добавить фильтр запрещенных слов в веб-прокси. Я НЕ Ищем запрещенные слова в других словах на странице, но искал запрещенные слова на загруженной странице. Я вообще не ищу запрещенные слова в других словах, но внутри страницы (метатеги, контент).
Итак, если я ищу слово «петух», тогда слово «петушок» не должно вызывать фильтр.
Я только что протестировал этот код и, да, как и ожидалось, код работает, но, как вы можете догадаться, есть много энергии процессора, проходящей через велосипед. Один момент загрузки страницы, в другой момент он становится серым и показывает признаки того, что страница занимает слишком много времени для загрузки. И все это на локальном хосте. Теперь я могу представить, что сделает мой хостинг! Итак, теперь нам нужно придумать лучшее решение. Есть идеи ? Как мы не получаем скрипт для проверки на загруженной странице для всех запрещенных слов? Как мы можем заставить скрипт остановиться, как только будет найдено 1 запрещенное слово, и было сделано эхо, которое было найдено запрещенным словом, и где на странице? (метатеги, содержание тела и т. д.). Любые предложения кода?
Вот что я получил до сих пор:
<?php /* ERROR HANDLING */ // 1). $curl is going to be data type curl resource. $curl = curl_init(); // 2). Set cURL options. curl_setopt($curl, CURLOPT_URL, 'https://www.buzzfeed.com/mjs538/the-68- words-you-cant-say-on-tv?utm_term=.xlN0R1Go89#.pbdl8dYm3X'); curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false); curl_setopt($curl, CURLOPT_RETURNTRANSFER, true ); // 3). Run cURL (execute http request). $result = curl_exec($curl); $response = curl_getinfo( $curl ); if( $response['http_code'] == '200' ) { //Set banned words. $banned_words = array("Prick","Dick","***"); //Separate each words found on the cURL fetched page. $word = explode(" ", $result); //var_dump($word); for($i = 0; $i <= count($word); $i++) { foreach ($banned_words as $ban) { if (strtolower($word[$i]) == strtolower($ban)) { echo "word: $word[$i]<br />"; echo "Match: $ban<br>"; } else { echo "word: $word[$i]<br />"; echo "No Match: $ban<br>"; } } } } // 4). Close cURL resource. curl_close($curl);
Мне сказали сделать это вот так:
Загрузите страницу в строку. Используйте preg_match с «границами слов» в загруженной строке и пропустите ваши запрещенные слова.
Q1, Как загрузить страницу в строку? Но я понятия не имею, как начать с этого. И поэтому любой образец кода будет оценен всеми новичками, включая меня. Любые примеры кода приветствуются.
UPDATE: я обновил свой код, вставив коды miknik. Он работал нормально, пока я не добавил эту строку перед cURL: $ banned_words = array («Prick», «Dick», «***»);
Вот обновление:
<?php /* ERROR HANDLING */ // 1). Set banned words. $banned_words = array("Prick","Dick","***"); // 2). $curl is going to be data type curl resource. $curl = curl_init(); // 3). Set cURL options. curl_setopt($curl, CURLOPT_URL, 'https://www.buzzfeed.com/mjs538/the-68- words- you-cant-say-on-tv?utm_term=.xlN0R1Go89#.pbdl8dYm3X'); curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false); curl_setopt($curl, CURLOPT_RETURNTRANSFER, true ); // 4). Run cURL (execute http request). $result = curl_exec($curl); $response = curl_getinfo( $curl ); if($response['http_code'] == '200' ) { $regex = '/\b'; // The beginning of the regex string syntax $regex .= implode('\b|\b', $banned_words); // joins all the banned words to the string with correct regex syntax $regex .= '\b/i'; // Adds ending to regex syntax. Final i makes it case insensitive $substitute = '****'; $cleanresult = preg_replace($regex, $substitute, $result); echo $cleanresult; } curl_close($curl); ?>
У вас уже есть содержимое страницы, это $result
preg_match
будет работать, но что вы тогда хотите сделать, когда найдете совпадение? preg_replace
более подходит, если вы хотите отфильтровать запрещенные слова.
Нет необходимости взорвать строку в отдельных словах, вы просто добавляете много накладных расходов процессора, делая это. Обработать переменную $result
как есть.
Поэтому сначала создайте строку регулярного выражения из вашего массива запрещенных слов. Основной синтаксис для сопоставления каждого слова – \bXXXX\b
где XXXX – ваше запрещенное слово. \b
на каждом конце означает, что он должен быть на границе слова, поэтому \bcock\b
будет соответствовать петуху и петуху! но не петушок.
$regex = '/\b'; // The beginning of the regex string syntax $regex .= implode('\b|\b', $banned_words); // joins all the banned words to the string with correct regex syntax $regex .= '\b/i'; // Adds ending to regex syntax. Final i makes it case insensitive
Теперь вы можете запустить одну операцию над $result
и получить новую строку со всеми запрещенными словами, цензуре. Установите свое значение для каждого запрещенного слова
$substitute = '****';
Затем выполните замену
$cleanresult = preg_replace($regex, $substitute, $result);
Предполагая $result = 'You are a cock! You prick! You are such a dick.';
$result = 'You are a cock! You prick! You are such a dick.';
echo $cleanresult
returns Вы – ****! Вы ****! Ты такой ****.