我正在对字符串执行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);
答案 0 :(得分:1)
将$ref['code']
替换为addslashes($ref['code'])
。
答案 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()
。