Я понял корень проблемы.
На JVisualVM я видел, что все потоки были заблокированы друг другом, но я не знал, почему. Теперь все ясно - я использую system.out.println () в качестве операции блока, но потоки не могут использовать ее одновременно, консоль заблокирована.
Я изменил вывод консоли на вывод файла (используйте имя потока в качестве имени файла для предотвращения блокировки) и снова запустите приложение. Теперь это работа, как и ожидалось.
Глупая ошибка, но я надеюсь, она кому-нибудь пригодится:)
Или декодируйте их использующий html_entity_decode
или удалите их использующий preg_replace
:
$Content = preg_replace("/&#?[a-z0-9]+;/i","",$Content);
(От здесь )
РЕДАКТИРОВАНИЕ: Альтернатива согласно комментарию
Jacco могла бы быть хороша заменить '+' {2,8} или что-то. Это ограничит шанс замены всех предложений когда незакодированный '&'; присутствует.
$Content = preg_replace("/&#?[a-z0-9]{2,8};/i","",$Content);
Используйте html_entity_decode
для преобразования объектов HTML.
необходимо будет установить набор символов, чтобы заставить его работать правильно.
Можно хотеть, смотрят на htmlentities () и html_entity_decode () здесь
$orig = "I'll \"walk\" the <b>dog</b> now";
$a = htmlentities($orig);
$b = html_entity_decode($a);
echo $a; // I'll "walk" the <b>dog</b> now
echo $b; // I'll "walk" the <b>dog</b> now
Простая ваниль представляет способ в виде строки сделать это, не затрагивая preg regex механизм:
function remEntities($str) {
if(substr_count($str, '&') && substr_count($str, ';')) {
// Find amper
$amp_pos = strpos($str, '&');
//Find the ;
$semi_pos = strpos($str, ';');
// Only if the ; is after the &
if($semi_pos > $amp_pos) {
//is a HTML entity, try to remove
$tmp = substr($str, 0, $amp_pos);
$tmp = $tmp. substr($str, $semi_pos + 1, strlen($str));
$str = $tmp;
//Has another entity in it?
if(substr_count($str, '&') && substr_count($str, ';'))
$str = remEntities($tmp);
}
}
return $str;
}
Похоже на то, что Вы действительно хотите:
function xmlEntities($string) {
$translationTable = get_html_translation_table(HTML_ENTITIES, ENT_QUOTES);
foreach ($translationTable as $char => $entity) {
$from[] = $entity;
$to[] = '&#'.ord($char).';';
}
return str_replace($from, $to, $string);
}
Это заменяет именованные сущности их числовым эквивалентом.
<?php
function strip_only($str, $tags, $stripContent = false) {
$content = '';
if(!is_array($tags)) {
$tags = (strpos($str, '>') !== false
? explode('>', str_replace('<', '', $tags))
: array($tags));
if(end($tags) == '') array_pop($tags);
}
foreach($tags as $tag) {
if ($stripContent)
$content = '(.+</'.$tag.'[^>]*>|)';
$str = preg_replace('#</?'.$tag.'[^>]*>'.$content.'#is', '', $str);
}
return $str;
}
$str = '<font color="red">red</font> text';
$tags = 'font';
$a = strip_only($str, $tags); // red text
$b = strip_only($str, $tags, true); // text
?>