维基百科样式列表编辑

时间:2014-12-02 15:01:11

标签: php

在编辑页面时,有没有人可以建议使用PHP创建项目符号列表的最佳方法,就像维基百科一样(实际上是StackOverflow)?

用户可以在保存在数据库中的表单中输入以下内容...

text text text
My bullet list:
* bullet 1
* bullet 2
* bullet 3
Some more text here.

在页面上调用时,将字符串转换为...

text,text,text
My bullet list:
<ul>
<li>List point one</li>
<li>List point two</li>
</ul>
Some more text here.

我正在玩str_replace,显然很容易用html标签替换星号但是如何添加结束标签等?

2 个答案:

答案 0 :(得分:0)

我建议使用正则表达式给出一个例子

$input = "* this is a list item"

您可以使用

preg_replace("/\*\s([a-z].*)/", "<li> $1 <li>", $input);

获得

<li> this is a list item </li>

如果您对如何使用preg_replace感到好奇 http://php.net/manual/en/function.preg-replace.php

答案 1 :(得分:0)

您还可以使用带有一点正则表达式的字符串操作来完成此操作。这将替换以*开头的所有行,使其成为无序列表。

$some_string = ""; // your input string goes here

$string_array = explode( "\r\n", $some_string ); //here we create an array from the string, broken up by new lines

for($i = 0; $i < count( $string_array ); $i ++) {

    if (preg_match( '/^\*/', $string_array [$i] ) == 1 && preg_match( '/^\*/', $string_array [$i-1] ) == 0 && strpos( $string_array [$i - 1], '<ul>' ) === false && strpos( $string_array [$i - 1], '<li>' ) === false)
        $string_array [$i] = "<ul>\n<li>" . preg_replace( '/^\*\s/', '', $string_array [$i] ) . '</li>';
    elseif (preg_match( '/^\*/', $string_array [$i] ) == 1)
        $string_array [$i] = '<li>' . preg_replace( '/^\*\s/', '', $string_array [$i] ) . '</li>';
    if (preg_match( '/^\*/', $string_array [$i+1] ) == 0 && strpos( $string_array [$i], '</li>' ) !== false)
        $string_array [$i] .= "\n</ul>";
}

$result = implode( "\r\n", $string_array ); //here we reconstruct the array

echo $result;

这是一个粗略的例子,但它应该让你知道你可以用这样的字符串做什么