使用 PHP 将字符串分成两部分以生成新的 html 文档
Brake a string into two parts using PHP to generate a new html document
我在这里要做的是打开一个 php 文档并只显示部分文本,在 70 个单词(或 900 个字符)设置锚点后打开其余部分新 html(或 php)文档中的字符串内容...
这是我到目前为止能够收集到的内容。
<?php
$str = '<p>El sistema de reconocimiento facial ha sido instalado en los baños públicos del Templo del Cielo en Pekín para evitar el malgasto de papel higiénico, que era tomado en cantidades ingentes por algunos turistas, informó hoy el diario Beijing Evening News.</p>
<p>En la instalación del parque, uno de los más famosos de Pekín, una máquina escanea el rostro del usuario, le dispensa un trozo de papel higiénico de 60 centímetros de longitud y no le permite volver a usar más hasta que han pasado nueve minutos.</p>
<p>"Creemos que es la única manera de evitar el despilfarro de papel higiénico", explicó a la prensa local el diseñador del polémico aparato.</p>
<p><img src="http://alfredoalvarez.mx/img/fotos/normal/01644814.jpg" /></p>
<p>"Si alguien se encontrase realmente indispuesto puede solicitar ayuda a nuestro personal", añadió.</p>
<p><strong> GASTABAN 12 ROLLOS, AHORA SÓLO OCUPAN 4 AL DÍA... </strong></p>
<p> La Oficina Municipal de Parques de Pekín lanzó una campaña en la red social Weibo (el Twitter chino) a principios de marzo para concienciar a la gente, en especial a los turistas chinos, sobre un uso responsable de estas instalaciones públicas, ya que algunos usuarios se llevaban el papel.</p>
<p><img src="http://alfredoalvarez.mx/img/fotos/normal/21644816.jpg" /></p>
<p>Las primeras máquinas se instalaron el pasado año en varios aseos públicos del Parque Olímpico de la capital china, una zona que ya cuenta con un total de hasta veinte dispositivos y que, según trabajadores del recinto, ha generado un ahorro de unos 2.100 yuanes mensuales (alrededor de 300 dólares, 285 euros) por baño.</p>
<p>Por su parte, uno de los administradores del parque relató cómo, antes de instalar este sistema, en un baño se gastaban una media de 14 rollos al día, "y ahora sólo gastamos 4".</p>
<p>La medida no ha estado exenta de polémica y ha enfadado a algunos ciudadanos chinos que la consideran "falta de responsabilidad social" para quienes puedan verse en situaciones de necesidad. </p><p> </p>
<p>Tambien lee: <a href="articulo.php?art=295">Arrestan a turistas por tener sexo fuera del matrimonio</a></p>
<p> </p>';
if(empty($_GET['blq'])){
$bl2='2';
$bl1 = substr($str, 0, 900);
$result1 = substr($bl1, 0, strrpos($bl1, ' '));
echo $result1.' ... <a href="test.php?blq='. $bl1 .'">Continue.</a></p>';
}elseif(isset($_GET['blq']) && $_GET['blq']=='2'){
$bl2 = substr($str2, 880, 2000);
$result2 = substr($bl2, 0, strrpos($bl2, '.')).'.';
echo '<p>'.$result2.'</p>';
}
?>
它可以工作,但如果字符串在一个标签的中间结束或开始,我会得到标签的剪切片段。
我试过使用这个例子:
$arr = explode(" ", str_replace(",", ", ", $str));
$str='';
for ($index = 0; $index < 72; $index++) {
echo $str = $arr[$index]. " ";
}
但想不出如何在下一页上提取字符串延续。
首先我们需要一个更明智的方法来解决这个问题,所有的行都包含在一个 <p>
元素中,我们不想在中间剪断,所以严格的长度无济于事.
这段漂亮的代码会将您的字符串转换为一个数组,其中每个 <p>
标签都有自己的索引。允许的元素是 '<img><strong><a>'
,所有其他元素都将被剥离,包括我们可以稍后添加的 <p>
元素。
$data = array_map(function($v){
return strip_tags($v, '<img><strong><a>');
}, explode('</p>', $str));
print_r($data);
接下来你想按长度切割,你想要页面所以让我们创建一个小函数:
function page($array, $start = 0, $chars = 800){
$start = $start * $chars; // start writing to array when amount of chars has been reached.
$e = $start + $chars; // End the loop when this number has been achieved.
$c = 0;
foreach($array as $v){
$c += strlen($v);
if($c > $e){
// stop the loop, the amount of chars for this page has been reached.
break;
}
if($start < $c){
//write data to new array
$tmp[] = $v;
}
}
return $tmp;
}
现在您只需执行以下操作即可:
$page = isset($p = $_GET['blq']) && is_numeric($p) ? $p : 1;
$pagetext = page($data, $page - 1);
if(!empty($pagetext)){
foreach($pagetext as $v){
echo "<p>$v</p>";
}
} else {
echo 'the text is out of bounds';
}
这将适用于以下索引。
http://yoursite.com/?blq=1
http://yoursite.com/?blq=2
http://yoursite.com/?blq=3
http://yoursite.com/?blq=4
我在这里要做的是打开一个 php 文档并只显示部分文本,在 70 个单词(或 900 个字符)设置锚点后打开其余部分新 html(或 php)文档中的字符串内容...
这是我到目前为止能够收集到的内容。
<?php
$str = '<p>El sistema de reconocimiento facial ha sido instalado en los baños públicos del Templo del Cielo en Pekín para evitar el malgasto de papel higiénico, que era tomado en cantidades ingentes por algunos turistas, informó hoy el diario Beijing Evening News.</p>
<p>En la instalación del parque, uno de los más famosos de Pekín, una máquina escanea el rostro del usuario, le dispensa un trozo de papel higiénico de 60 centímetros de longitud y no le permite volver a usar más hasta que han pasado nueve minutos.</p>
<p>"Creemos que es la única manera de evitar el despilfarro de papel higiénico", explicó a la prensa local el diseñador del polémico aparato.</p>
<p><img src="http://alfredoalvarez.mx/img/fotos/normal/01644814.jpg" /></p>
<p>"Si alguien se encontrase realmente indispuesto puede solicitar ayuda a nuestro personal", añadió.</p>
<p><strong> GASTABAN 12 ROLLOS, AHORA SÓLO OCUPAN 4 AL DÍA... </strong></p>
<p> La Oficina Municipal de Parques de Pekín lanzó una campaña en la red social Weibo (el Twitter chino) a principios de marzo para concienciar a la gente, en especial a los turistas chinos, sobre un uso responsable de estas instalaciones públicas, ya que algunos usuarios se llevaban el papel.</p>
<p><img src="http://alfredoalvarez.mx/img/fotos/normal/21644816.jpg" /></p>
<p>Las primeras máquinas se instalaron el pasado año en varios aseos públicos del Parque Olímpico de la capital china, una zona que ya cuenta con un total de hasta veinte dispositivos y que, según trabajadores del recinto, ha generado un ahorro de unos 2.100 yuanes mensuales (alrededor de 300 dólares, 285 euros) por baño.</p>
<p>Por su parte, uno de los administradores del parque relató cómo, antes de instalar este sistema, en un baño se gastaban una media de 14 rollos al día, "y ahora sólo gastamos 4".</p>
<p>La medida no ha estado exenta de polémica y ha enfadado a algunos ciudadanos chinos que la consideran "falta de responsabilidad social" para quienes puedan verse en situaciones de necesidad. </p><p> </p>
<p>Tambien lee: <a href="articulo.php?art=295">Arrestan a turistas por tener sexo fuera del matrimonio</a></p>
<p> </p>';
if(empty($_GET['blq'])){
$bl2='2';
$bl1 = substr($str, 0, 900);
$result1 = substr($bl1, 0, strrpos($bl1, ' '));
echo $result1.' ... <a href="test.php?blq='. $bl1 .'">Continue.</a></p>';
}elseif(isset($_GET['blq']) && $_GET['blq']=='2'){
$bl2 = substr($str2, 880, 2000);
$result2 = substr($bl2, 0, strrpos($bl2, '.')).'.';
echo '<p>'.$result2.'</p>';
}
?>
它可以工作,但如果字符串在一个标签的中间结束或开始,我会得到标签的剪切片段。
我试过使用这个例子:
$arr = explode(" ", str_replace(",", ", ", $str));
$str='';
for ($index = 0; $index < 72; $index++) {
echo $str = $arr[$index]. " ";
}
但想不出如何在下一页上提取字符串延续。
首先我们需要一个更明智的方法来解决这个问题,所有的行都包含在一个 <p>
元素中,我们不想在中间剪断,所以严格的长度无济于事.
这段漂亮的代码会将您的字符串转换为一个数组,其中每个 <p>
标签都有自己的索引。允许的元素是 '<img><strong><a>'
,所有其他元素都将被剥离,包括我们可以稍后添加的 <p>
元素。
$data = array_map(function($v){
return strip_tags($v, '<img><strong><a>');
}, explode('</p>', $str));
print_r($data);
接下来你想按长度切割,你想要页面所以让我们创建一个小函数:
function page($array, $start = 0, $chars = 800){
$start = $start * $chars; // start writing to array when amount of chars has been reached.
$e = $start + $chars; // End the loop when this number has been achieved.
$c = 0;
foreach($array as $v){
$c += strlen($v);
if($c > $e){
// stop the loop, the amount of chars for this page has been reached.
break;
}
if($start < $c){
//write data to new array
$tmp[] = $v;
}
}
return $tmp;
}
现在您只需执行以下操作即可:
$page = isset($p = $_GET['blq']) && is_numeric($p) ? $p : 1;
$pagetext = page($data, $page - 1);
if(!empty($pagetext)){
foreach($pagetext as $v){
echo "<p>$v</p>";
}
} else {
echo 'the text is out of bounds';
}
这将适用于以下索引。
http://yoursite.com/?blq=1
http://yoursite.com/?blq=2
http://yoursite.com/?blq=3
http://yoursite.com/?blq=4