V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
shaweren
V2EX  ›  问与答

PHP str_replace 替换 $变量符号无法识别的问题

  •  
  •   shaweren · 2017-05-19 16:08:18 +08:00 · 2239 次点击
    这是一个创建于 2779 天前的主题,其中的信息可能已经有所发展或是发生改变。

    $text="[%url][%title]
    "; $tex=str_replace("%","$",$text); echo $tex; str_replace 替换后变量不能识别怎么破

    14 条回复    2017-05-20 03:33:12 +08:00
    explon
        1
    explon  
       2017-05-19 16:09:55 +08:00
    单引号跟双引号的区别你知道吗?
    konakona
        2
    konakona  
       2017-05-19 16:12:25 +08:00
    "\$" 试试看咯
    或者'$'
    shaweren
        3
    shaweren  
    OP
       2017-05-19 16:16:45 +08:00
    @explon 单引号里面的变量不能识别?
    shaweren
        4
    shaweren  
    OP
       2017-05-19 16:17:56 +08:00
    @konakona 好像没有用
    konakona
        5
    konakona  
       2017-05-19 16:21:18 +08:00
    @shaweren 其实你的代码,我运行已经成功了。
    shaweren
        6
    shaweren  
    OP
       2017-05-19 16:24:15 +08:00
    @konakona 输出是作为字符串输出了,而不是作为变量。
    kchum
        7
    kchum  
       2017-05-19 16:29:14 +08:00
    是输出这个 [$url][$title] 运行没毛病,还是你需求不对
    shaweren
        8
    shaweren  
    OP
       2017-05-19 16:32:14 +08:00
    @kchum
    @konakona

    $title="titleName";

    $url="http";

    $text="[%url]<I>[%title]</I><br>";

    $tex=str_replace('%','$',$text);

    echo $tex;

    希望输出是:[http]<I>[titleName]</I><br>;

    这个能实现么?
    littleylv
        9
    littleylv  
       2017-05-19 16:38:22 +08:00   ❤️ 1
    <?php
    $url = 'urlurl';
    $title = 'titletitle';
    $a = '[%url][%title]';
    $b = str_replace('%', '$', $a);
    eval("\$b = \"$b\";");
    echo $b . PHP_EOL;
    shaweren
        10
    shaweren  
    OP
       2017-05-19 16:40:05 +08:00
    @littleylv 膜拜!
    hteen
        11
    hteen  
       2017-05-19 16:43:25 +08:00   ❤️ 1
    $url = 'url';
    $title = 'title';
    $text="[%url%][%title%]";
    preg_match_all('/%(\w+)%/', $text, $match);

    foreach ($match[1] as $key => $val)
    $text = str_replace($match[0][$key], $$val, $text);

    echo $text;
    kchum
        12
    kchum  
       2017-05-19 16:43:53 +08:00   ❤️ 1
    @shaweren [$url]<I>[$title]</I><br> ,你的需求不是用这个。

    $title="titleName";
    $url="http";
    printf("[%s]<I>[%s]</I><br>" , $url,$title);

    输出
    [http]<I>[titleName]</I><br>
    wangjie
        13
    wangjie  
       2017-05-19 16:58:37 +08:00
    @shaweren #8
    <?php
    $title = "titleName";
    $url = "http";
    $text = "[%url]<I>[%title]</I><br>";
    $tex = preg_replace_callback('/%([a-z]+)/', function($matches) {
    global ${$matches[1]};
    return ${$matches[1]};
    } , $text);
    echo $tex;
    msg7086
        14
    msg7086  
       2017-05-20 03:33:12 +08:00
    $符号是在要写字符串的时候就确定下来的。
    你这代码,只有第一行写双引号的时候$才会被解析。
    没第二行以后的代码什么事的。
    解析$是双引号的功能。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1164 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 24ms · UTC 18:28 · PVG 02:28 · LAX 10:28 · JFK 13:28
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.