Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/228.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PHP函数帮助/初学者_Php - Fatal编程技术网

PHP函数帮助/初学者

PHP函数帮助/初学者,php,Php,看,如果论坛帖子have$hide\u smilies设置为1,我不希望:p,:o被图像替换 这就是我如何输出论坛帖子bbcode($message) 和功能: function bbcode($str) { $str = htmlentities($str); $find = array( "/:p/", "/:o/", '/\[b](.*?)\[\/b]/is', '/\[u](.*?)\[\/u]/is', '/\[i](.*?)\

看,如果论坛帖子have$hide\u smilies设置为1,我不希望:p,:o被图像替换

这就是我如何输出论坛帖子
bbcode($message)

和功能:

function bbcode($str)
{
    $str = htmlentities($str);

    $find = array(
    "/:p/",
    "/:o/",
    '/\[b](.*?)\[\/b]/is',
    '/\[u](.*?)\[\/u]/is',
    '/\[i](.*?)\[\/i]/is'
    );

    $replace = array(
    '<img src="/images/forum/icon_tongue.gif" alt=":p" border="0" height="15" width="15">',
    '<img src="/images/forum/icon_embarrassed.gif" alt=":o" border="0" height="15" width="15">'
    '<strong>$1</strong>',
    '<u>$1</u>',
    '<i>$1</i>',

    $str = preg_replace($find, $replace, $str);



    return nl2br($str);
函数bbcode($str)
{
$str=htmlentities($str);
$find=数组(
“/:p/”,
“/:o/”,
“/\[b](.*?\[\/b]/is”,
“/\[u](.*?\[\/u]/is”,
“/\[i](.*)\[\/i]/is”
);
$replace=数组(
'',
''
“$1”,
'$1',
'$1',
$str=preg_replace($find,$replace,$str);
返回nl2br($str);
谢谢

编辑
函数bbcode($str,$hide\u smilies=0)
{
$str=htmlentities($str);
$find=数组(
“/\[b](.*?\[\/b]/is”,
“/\[u](.*?\[\/u]/is”,
“/\[i](.*?\[\/i]/is”,
);
$replace=数组(
“$1”,
'$1',
'$1'
);
如果($hide_smilies==0)
{
$find[]=“/:p/”;
$find[]=“/:o/”;
$replace[]='';
$replace[]='';
}
$str=preg_replace($find,$replace,$str);
返回nl2br($str);
}

这是可行的,但现在(如果hide_smilies=0)一些字符,如“被替换为
等等,如果hide smilies设置为1,则只回显$message而不是回显bbcode($message)。下面是一个简单的三元语句,应该可以工作:

echo ($hide_smilies==1) ? $message : bbcode($message);
只需使用array_slice()切掉不需要的位。我假设您可以将$hide_smilies变量传递给bbcode()函数

<?php
function bbcode($str, $hide_smilies=0) {
    $str = htmlentities($str);

    $find = array(
    "/:p/",
    "/:o/",
    '/\[b](.*?)\[\/b]/is',
    '/\[u](.*?)\[\/u]/is',
    '/\[i](.*?)\[\/i]/is',
    );

    $replace = array(
    '<img src="/images/forum/icon_tongue.gif" alt=":p" border="0" height="15" width="15">',
    '<img src="/images/forum/icon_embarrassed.gif" alt=":o" border="0" height="15" width="15">',
    '<strong>$1</strong>',
    '<u>$1</u>',
    '<i>$1</i>',
    );

    if ($hide_smilies) {
        $find = array_slice($find, 2);
        $replace = array_slice($replace, 2);
    }

    $str = preg_replace($find, $replace, $str);

    return nl2br($str);
}
?>

如果我理解正确,即使$hide\u smilies为1,您仍然希望用HTML等价物替换[b]和[I],对吗?在这种情况下,仅使用非smiley模式初始化每个数组,然后在$hide\u smilies=1时添加额外的元素。例如:

// either pass in $hide_smilies, declare it global inside bbcode(),
// or use $_GLOBALS['hide_smilies']
function bbcode($str, $hide_smilies)
{
    $str = htmlentities($str);

    $find = array(
    '/\[b](.*?)\[\/b]/is',
    '/\[u](.*?)\[\/u]/is',
    '/\[i](.*?)\[\/i]/is'
    );

    $replace = array(
    '<strong>$1</strong>',
    '<u>$1</u>',
    '<i>$1</i>');


    if ($hide_smilies == 1)
    {
        $find[] = "/:p/";
        $find[] = "/:o/";

        $replace[] = '<img src="/images/forum/icon_tongue.gif" alt=":p" border="0" height="15" width="15">';
        $replace[] = '<img src="/images/forum/icon_embarrassed.gif" alt=":o" border="0" height="15" width="15">';
    }

    $str = preg_replace($find, $replace, $str);

    return nl2br($str);
}
//要么传入$hide\u smilies,要么在bbcode()中声明为全局,
//或者使用$\u GLOBALS['hide\u smilies']
函数bbcode($str,$hide_smilies)
{
$str=htmlentities($str);
$find=数组(
“/\[b](.*?\[\/b]/is”,
“/\[u](.*?\[\/u]/is”,
“/\[i](.*)\[\/i]/is”
);
$replace=数组(
“$1”,
'$1',
'$1');
如果($hide_smilies==1)
{
$find[]=“/:p/”;
$find[]=“/:o/”;
$replace[]='';
$replace[]='';
}
$str=preg_replace($find,$replace,$str);
返回nl2br($str);
}
函数bbcode($str)
{
$str=htmlentities($str);
$find=数组(
“/\[b](.*?\[\/b]/is”,
“/\[u](.*?\[\/u]/is”,
“/\[i](.*)\[\/i]/is”
);
$replace=数组(
“$1”,
'$1',
'$1',
);
$str=preg_replace($find,$replace,$str);
返回nl2br($str);
}

只需在函数中添加一个参数,并相应地更改构建$find数组的方式即可

function bbcode($str, $hideSmilies = false)
{

$find = array(
'/\[b](.*?)\[\/b]/is',
'/\[u](.*?)\[\/u]/is',
'/\[i](.*?)\[\/i]/is'
);

if (!$hideSmilies)
{
    $find[] = "/:p/";
    $find[] = "/:o/";
}

我认为,他仍然需要进行其他替换。哦,然后将第二个参数传递给bbcode函数$hide_smilies,给它一个默认值false(或0)。在函数中,创建两个替换数组,一个用于smilies,另一个用于其他。然后对两个数组执行preg_replace。如果我有更多时间,我会为您修复它。嗯,它可以工作,但现在我的文本字符如“get replace with” etc@Basta使用我的代码并将其应用到函数中。用我拥有的代码替换代码中创建$find的部分,并在下面添加我的if语句。当然,用我拥有的代码替换函数行。抱歉,我应该在我的帖子中提到这不是完整的代码。这可能与您调用htmlenti有关关系()在函数的开头。如果你不想让特殊字符被它们的html实体等价物替换,你可以对此进行注释,但要注意没有正确编码的奇怪字符。但以前不是这样的,我一直在顶部有htmlentities。只有当你查看网页源时,它才会被替换。但现在所有的y帖子看起来很疯狂,我纠正了语法中的一些错误,比如在$replace中调用array()时没有包含结尾“)(并排比较这两个函数,你就会看到。)这只是你重新键入时的一个输入错误,还是在原始代码>?“这很有效,但是现在(如果hide\u smilies=0)一些字符,比如”被替换为“等等”是否确定只有在隐藏微笑时才会发生这种情况?您正在调用htmlentities()在函数的最顶端,它就是这样做的:我第一次重新加载时做的,可能它没有很好地重新加载。但是你如何才能使输出安全呢?如果你不能使用htmlentities,我不是建议你不应该使用htmlentities()。基于该代码,没有理由仅当hide_smilies=0时才发生。这两种情况下都应该发生。该问题可能是双重编码。也就是说,可能是字符串通过htmlentities()传递[或具有类似功能的内容]不止一次。我还要确保HTML源代码本身没有问题。
function bbcode($str)
{
    $str = htmlentities($str);

    $find = array(
        '/\[b](.*?)\[\/b]/is',
        '/\[u](.*?)\[\/u]/is',
        '/\[i](.*?)\[\/i]/is'
    );

    $replace = array(
        '<strong>$1</strong>',
        '<u>$1</u>',
        '<i>$1</i>',
     );

    $str = preg_replace($find, $replace, $str);

    return nl2br($str);
}
function bbcode($str, $hideSmilies = false)
{

$find = array(
'/\[b](.*?)\[\/b]/is',
'/\[u](.*?)\[\/u]/is',
'/\[i](.*?)\[\/i]/is'
);

if (!$hideSmilies)
{
    $find[] = "/:p/";
    $find[] = "/:o/";
}