有时替换包含斜杠的字符串

时间:2011-10-27 09:02:21

标签: php str-replace

我正在对字符串执行str_replace(),有时会在其中包含斜杠。这是我的str_replace:

$text = str_replace('<Reference code="'.$ref['code'].'">','<a href="#" onclick="Ti.App.fireEvent(\'openPage\',{\'code\':\''.$ref['code'].'\'})">',$text);

但是,当$ref['code']是(例如)M100/3时,它不会替换。所以我的问题是,如何进行替换呢?

没有反斜杠的每个值都可以正常工作。

另请注意,在某些情况下,str_replace是这样的,所以不仅仅是在HTML参数中:

$text = str_replace('<Reference>'.(string)$ref.'</Reference>','<a href="#" onclick="Ti.App.fireEvent(\'openPage\',{\'code\':\''.(string)$ref.'\'})">'.(string)$ref.'</a>',$text);

编辑:

我尝试过addslashes()但它似乎没有起作用:

$text = str_replace('<Reference>'.addslashes((string)$ref).'</Reference>','<a href="#" onclick="Ti.App.fireEvent(\'openPage\',{\'code\':\''.(string)$ref.'\'})">'.(string)$ref.'</a>',$text);

3 个答案:

答案 0 :(得分:1)

$ref['code']替换为addslashes($ref['code'])

Source

答案 1 :(得分:0)

如果您正在为多个代码运行这些替换,您可能需要考虑使用正则表达式:

<?php

$string = 'some <Reference>in_content</Reference> and <Reference code="attribute-with-content">bla</Reference> or even <Reference code="selfclosing" />';
$pattern = '#(<Reference>(?<a1>.*?)</Reference>)|(<Reference code="(?<a2>[^"]+)" />)|(<Reference code="(?<a3>[^"]+)">(.*?)</Reference>)#';

$_string = preg_replace_callback($pattern, 'replace_reference', $string);
function replace_reference($matches) {
    $key = $matches['a1'] ?: $matches['a2'] ?: $matches['a3'];
    // maybe do a lookup if $key is valid or something
    // if something is off, return $matches[0] to not replace anything
    return '<a href="#" onclick="Ti.App.fireEvent(\'openPage\',{\'code\':\'' . $key . '\'})">';
}

var_dump($string, $_string);

有了这个,您甚至不必知道要替换的代码。

答案 2 :(得分:0)

真正的问题似乎是检测是否应该首先进行替换。

当数据通过XML进入时,该XML的构造是错误的,因此1层太深,因此无法正确检测文本,导致没有URL替换。

这个问题解决了,解决了这个问题。此处也不需要addslahes()