Замена строки, которая иногда содержит косую черту - PullRequest
0 голосов
/ 27 октября 2011

Я делаю 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);

edit:

Я пробовал addlashes (), но, похоже, он не работает:

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

Ответы [ 3 ]

1 голос
/ 27 октября 2011

Заменить $ref['code'] на addslashes($ref['code']).

Источник

0 голосов
/ 28 октября 2011

Реальная проблема, казалось, заключалась в обнаружении того, должна ли быть замена в первую очередь.

Поскольку данные поступают через XML, конструкция этого XML была неправильной, и поэтомубыл на 1 слой слишком глубоким и, таким образом, не мог правильно определить текст, что не привело к замене URL.

Эта проблема была решена, и проблема была устранена.Также нет необходимости в addslahes() там.

0 голосов
/ 27 октября 2011

Если вы выполняете эти замены для нескольких кодов, вы можете вместо этого рассмотреть регулярное выражение:

<?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);

При этом вам даже не нужно знать коды, которые вы хотите заменить.

...