2011-10-27 72 views
0

我正在做一個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

問題不在於更換,而是首先需要更換的檢測。現在解決它。沒有addslashes它也可以。 –

回答

0

真正的問題似乎是首先檢測是否應該替換。

當數據通過XML進入時,該XML的構造是錯誤的,因此是1層太深,因此無法正確檢測文本,導致沒有URL替換。

這個問題解決了,解決了這個問題。那裏也不需要addslahes()

1

更換$ref['code']addslashes($ref['code'])

Source

+0

剛試過,沒有工作。注意到我也有這個問題有點不對,這是一個正斜槓 –

+0

不會addslashes()也變成'成\'和「成\」? – rodneyrehm

+0

問題不在於更換,而是首先需要更換的檢測。現在解決它。沒有addslashes它也可以。無論如何,謝謝 –

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

有了這個,你甚至不必知道您要替換的代碼。

相關問題