如何解决“警告非法字符串”?

时间:2015-04-27 10:20:02

标签: php string wordpress

我正在研究另一个PHP版本。但是当我因不同的PHP版本将网站上传到客户端服务器时,我收到了这些错误

  

警告:非法字符串偏移'名称'   /homepages/3/d227794433/htdocs/flyefg/wp-content/plugins/gameplan-shortcodes/shortcodes/testimonial.php   第53行

     

警告:非法字符串偏移'位置'   /homepages/3/d227794433/htdocs/flyefg/wp-content/plugins/gameplan-shortcodes/shortcodes/testimonial.php   第53行

     

警告:非法字符串偏移'公司'   /homepages/3/d227794433/htdocs/flyefg/wp-content/plugins/gameplan-shortcodes/shortcodes/testimonial.php   第53行

     

警告:非法字符串偏移'名称'   /homepages/3/d227794433/htdocs/flyefg/wp-content/plugins/gameplan-shortcodes/shortcodes/testimonial.php   第53行

     

警告:非法字符串偏移'位置'   /homepages/3/d227794433/htdocs/flyefg/wp-content/plugins/gameplan-shortcodes/shortcodes/testimonial.php   第53行

     

警告:非法字符串偏移'公司'   /homepages/3/d227794433/htdocs/flyefg/wp-content/plugins/gameplan-shortcodes/shortcodes/testimonial.php   第53行

     

警告:非法字符串偏移'名称'   /homepages/3/d227794433/htdocs/flyefg/wp-content/plugins/gameplan-shortcodes/shortcodes/testimonial.php   第53行

     

警告:非法字符串偏移'位置'   /homepages/3/d227794433/htdocs/flyefg/wp-content/plugins/gameplan-shortcodes/shortcodes/testimonial.php   第53行

     

警告:非法字符串偏移'公司'   /homepages/3/d227794433/htdocs/flyefg/wp-content/plugins/gameplan-shortcodes/shortcodes/testimonial.php   第53行

第53行的代码是

$output .= '<div class="name">'.$atts['name'].($atts['position']?', '.$atts['position']:'').($atts['company']?' - '.$atts['company']:'').'</div>';

整个代码是(第35-62行)

function parse_testimonial_item($atts, $content, $id){
    $position = isset($atts['position']) ? $atts['position'] : '';
    $name = isset($atts['name']) ? $atts['name'] : '';
    $company = isset($atts['company']) ? $atts['company'] : '';
    wp_enqueue_script( 'jquery-isotope');
    global $testimonial_slides;

    $output = '';
    if($testimonial_slides > 1){
        if(function_exists( 'head_slide' )){
            $output .= head_slide($testimonial_slides, '', '', array('page'=>true));
        }
    }
    $output .= '<div class="testimonial style-1">';
    $output .= '<div class="tt-content icon-quote-right">';
    $output .= strip_tags($content);
    $output .= '<div class="tt-tooltip"><!----></div>';
    $output .= '</div>';
    $output .= '<div class="name">'.$atts['name'].($atts['position']?', '.$atts['position']:'').($atts['company']?' - '.$atts['company']:'').'</div>';
    $output .= '</div>';
    if($testimonial_slides > 1){
        if(function_exists( 'footer_slide' )){
            $output .= footer_slide(array('page'=>true));
        }
    }
    return $output;

}

谢谢

3 个答案:

答案 0 :(得分:4)

在函数的最开始,您正在检查这些值是否存在:

$position = isset($atts['position']) ? $atts['position'] : '';
$name = isset($atts['name']) ? $atts['name'] : '';
$company = isset($atts['company']) ? $atts['company'] : '';

因此,不要在代码中使用$atts[...],而应使用刚刚设置的变量。

另请注意,如果您立即正确设置值,则可以在以后删除三元表达式:

$name = isset($atts['name']) ? $atts['name'] : '';
$position = isset($atts['position']) ? (', ' . $atts['position']) : '';
$company = isset($atts['company']) ? (' - ' . $atts['company']) : '';

...

$output .= '<div class="name">'.$name.$position.company.'</div>';

答案 1 :(得分:3)

您的代码存在的问题是,虽然您过滤了$atts中的值,但您并未重复使用这些变量。

您的代码应如下所示:

$output .= '<div class="name">'.$name.($position?', '.$position:'').($company?' - '.$company:'').'</div>';

而不是:

$output .= '<div class="name">'.$atts['name'].($atts['position']?', '.$atts['position']:'').($atts['company']?' - '.$atts['company']:'').'</div>';

答案 2 :(得分:-4)

数组变量$ atts不包含“名称,位置”等,这就是您收到此错误的原因。检查数组$ atts中的数据。只需用解决@ $ atts问题替换$ atts。