У меня есть функция PHP, чтобы ловить длинные URL-адреса и обрезать их, чтобы они не нарушали форматирование моего сайта. У меня есть предложение ломать слова, но я не могу остановить текст следующим образом:
'Aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa'
Как я могу остановить вход пользователя таким образом?
То, что я пробовал, работает, если присутствуют черточки (и я тоже старался ­
в некоторых функциях, но ни один из них не влияет на вышеизложенное. Это для форума, и это последний бит пользовательского ввода. Я не могу прекратить разбивать мой сайт! Заранее благодарны за Вашу помощь.
wordwrap()
будет разбивать длинные слова, если вы wordwrap()
TRUE
в качестве четвертого параметра:
wordwrap( $very_long_string, 30, '<br />', TRUE );
Это приведет к разрыву до или до 30 символов. TRUE
требуется принудительное прерывание длинных слов. Если используется FALSE
(по умолчанию), строки разбиваются только на пробелы.
Вместо того, чтобы пытаться сломать слово в PHP, вы можете использовать CSS для стилизации страницы, чтобы она ломала длинные слова, когда они не вписываются в доступное пространство.
Стиль CSS для этого – word-wrap:break-word;
,
Примените это к элементу, который содержит длинный текст, и при необходимости он будет обертывать длинные слова.
Надеюсь, это поможет.
<?php $string = "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"; echo chunk_split($string, $char_length = 50, $line_ending = "<br />"); ?>
Вывод:
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
В основном, что вы хотите сделать, это реализовать Markov Chain или Bloom Filter, чтобы попытаться определить «тарабарщину» как таковую.
Забудьте, где я получил это сейчас, но я использовал эту небольшую функцию:
echo contains_gibberish ("heiahihaiahheiah");
function contains_gibberish( $input ) { $result = array(); for($i = 0; $i < strlen( $input ); $i++) { if ( isset( $result[ $input[ $i ] ] ) ) { $result[ $input[ $i ] ]++; } else { $result[ $input[ $i ] ] = 1; } } return ( max( $result ) / strlen( $input ) * 100 >= 33 ) ? true : false; }
Это позволит вам помечать ввод как потенциально мусор, альтернативы включают обертывание текста и т. Д.